不知道为什么我会死心选择AndEngine而没有考虑cocos2d for android来开发Android应用,也因为这个死心的缘故,让我有了以下总结,对读者说来可能不费任何力气,但是对我来说却花了一个星期多(本人愚笨).
关于编译AndEngine很少人会提及,在接收到AndEngine的第一手资料时大家一定会去找个jar包直接编译运行,我觉得这是一个错误的开始,先编译AndEngine才是王道,AndEngine相关的文档太少,AndEngine的源码才是最好的文档.
不多费话我们来编译AndEngine的包吧~
一.下载AndEngine源码:
1.下载安装svn:
你是否安装了svn?对于一个开发都入门最好的利器,她能让你得到很多的开源代码,先下载并安装吧.
2.下载源码:
在svn:Checkout路径中写入
https://github.com/nicolasgramlich/AndEngine
个人测试了多个AndEngine版本,为了可以被其它多个版本兼容,我选择了2011.7.5号887的AndEngine版本,为什么选择下载此版本SVN原因很简单他可以在android 1.6版本被编译通过,这也是最后一个可以被android1.6(android2.1)可编译通过的版本.有些人一定会说android1.6版本会不会太低?多年开发经验告诉我,不使用最新技术开发软件是最保险的开发方法,初学者会不断的追求高版本当然我也是支持的走在技术的最前沿,才能进步更快,但是我还是选择了887版本.
我又费话了~
二.编译AndEngine包
所谓的编译AndEngine就是把工程Export成jar包,看试很简单,我人傻花了不少时间,
为了节省读者的时间,我这直接把流程过一下吧:
右击工程Export->Jar File->默认会使用Export generated class files and resources,这个默认有点坑爹,把他选择为Export all output folders for checked projects,至于为什么?问度娘吧.再下一步Finished,恭喜你你离打成jar包只差一步,注定在这里ADT会给你一个惊喜---没有通过....... 解决方法见(对Error的解决3&4),把问题解决后这才是真的成功了.(建议导出的包名,名字后面加版本号或日期,好的习惯会让你离成功近点)
三.把AndEngine导入工程:
我第一次把AndEngine导入工程的时候是这样的:
左击自己的工程properties->Java Build Path->Projects->Add->AndEngine的源代码工程,期待着可以通过工程的Activity继承GameBaseActivity就可以跑起程序,错了~Eclipse让我失望了,我们必须要有相应的jar包才可以.打jar包参见上面的第二步.
把jar包导入工程的方法,最重要的一步是把导入的jar包先放在工程中的libs目录下,千万记得是libs不是lib目录,
右击工程properties->Java Build Path->Libraries->Add Jars...->选择自己工程下的libs目录下的jar包,点确认.终于解决了,现在可以通过工程的Activity继承GameBaseActivity就可以跑起程序代码见下.
四.对Error的解决方法:
用eclipse import到android project中后(相关eclipse的ADT的安装相关的资料很多),会出些很多error,我罗列一下我遇到的问题吧~
1.@Override居然会error:
解决方法:右击自己的工程properties->Java Compiler->勾选Enable ProjectSpecific setting ->选择JDK为1.6的编译.确认后Clean 当前工程,问题保证解决.
2.莫明的error
降低ADT由于对warning和Error的检查,新的ADT对错误的检查更为严格,设置方法
右击自己的工程properties->Android lint preferences->左边有一个不起眼的点击Configure Workspace Settings把没有必要的error去除就好了,一般这个问题不会也现在编译AndEngine中,我比较命背在编译的时候老会遇到.
3.在Export的时候遇到warning不能导出的问题:
把warning的地方直接注释就OK了
4.有的时候很想骂人,又不能export说什么ResourceXXX的,怎么办?
一不作二不休,Clean 后重新导出
5.我的jar放到lib目录中为什么还是错误呀?
ADT新的版本要求把lib改成libs把jar包放在libs中吧
6.How to fix “Error generating final archive: duplicate entry: AndroidManifest.xml”
这是什么问题,为什么重复使用了AndroidManifest.xml,原因jar包没有导好,参看前面第三步.
测试代码:
package com.example.testandengine20120805;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class XXXXXX extends BaseGameActivity {
public static final String TAG = "fuck";
private static final int CAMERA_WIDTH = 720;
private static final int CAMERA_HEIGHT = 480;
private Camera camera;
@Override
public Engine onLoadEngine() {
// TODO Auto-generated method stub
Log.e(TAG,"onLoadEngine" );
this.camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.camera));
}
@Override
public void onLoadResources() {
// TODO Auto-generated method stub
Log.e(TAG,"onLoadResources" );
}
@Override
public Scene onLoadScene() {
// TODO Auto-generated method stub
Log.e(TAG,"onLoadScene" );
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene(1);
scene.setBackground(new ColorBackground(0, 0, 8784f));
return scene;
}
@Override
public void onLoadComplete() {
// TODO Auto-generated method stub
Log.e(TAG,"onLoadComplete" );
}
}
以上的代码override和最新的AndEngine中的OnCreateXXX有些区别(选择AndEngine版本问题),在处理的时候注意一下以后方便使用最新代码的时候可以兼容.