AndEngine编译

来源:互联网 发布:不可抗力网络剧百度云 编辑:程序博客网 时间:2024/06/06 14:59

不知道为什么我会死心选择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版本问题),在处理的时候注意一下以后方便使用最新代码的时候可以兼容.

原创粉丝点击