PiL*_*LLe 11 eclipse android adt multiple-projects apk
我试图让一个游戏项目与平台无关,所以我把它分成三个项目,从低级别到顶级的android特定级别,如:引擎,游戏,安卓游戏.
错误中涉及的类/接口是:
(低级)引擎项目定义了这个接口:
com.myteam.engine.IGame
Run Code Online (Sandbox Code Playgroud)(中级)平台独立游戏项目定义了这些类:
com.myteam.myproject.Game
com.myteam.myproject.MyProject (derived from com.myteam.myproject.Game)
Run Code Online (Sandbox Code Playgroud)(顶级)android项目实现活动等:
com.myteam.myproject.android.MyAndroidActivity (using com.myteam.myproject.MyProject)
Run Code Online (Sandbox Code Playgroud)所有编译良好并在Windows下完美运行(使用前两个在3级上的另一个Windows项目).
但是当使用ADT运行时,它会在Activity启动时在运行时失败.Android应用程序基本上只显示一个带有"NoClassDefFoundError com.myteam.myproject.MyProject"异常的调用堆栈.
在LogCat输出显示的加载/解析时,异常似乎是由它的超类(或超类'接口)引起的:
12-20 19:51:51.897: D/ddm-heap(218): Got feature list request
12-20 19:51:52.207: I/dalvikvm(218): Failed resolving Lcom/myteam/myproject/Game; interface 18 'Lcom/myteam/engine/IGame;'
12-20 19:51:52.217: W/dalvikvm(218): Link of class 'Lcom/myteam/myproject/Game;' failed
12-20 19:51:52.227: W/dalvikvm(218): Unable to resolve superclass of Lcom/myteam/myproject/MyProject; (52)
12-20 19:51:52.227: W/dalvikvm(218): Link of class 'Lcom/myteam/myproject/MyProject;' failed
12-20 19:51:52.227: E/dalvikvm(218): Could not find class 'com.myteam.myproject.MyProject', referenced from method com.myteam.myproject.android.MyAndroidActivity.onCreate
12-20 19:51:52.227: W/dalvikvm(218): VFY: unable to resolve new-instance 54 (Lcom/myteam/myproject/MyProject;) in Lcom/myteam/myproject/android/Youcode_AndroidActivity;
12-20 19:51:52.227: D/dalvikvm(218): VFY: replacing opcode 0x22 at 0x0008
12-20 19:51:52.227: D/dalvikvm(218): Making a copy of Lcom/myteam/myproject/android/Youcode_AndroidActivity;.onCreate code (88 bytes)
Run Code Online (Sandbox Code Playgroud)
我尝试在其他帖子和论坛中描述的Android游戏项目的"构建路径/顺序和导出"Eclipse项目设置下添加两个第一个项目,但它没有改变一件事.
我的预感是Manifest或Project设置需要另外提到apk包或运行时的包/类依赖项.有任何想法吗?
jfr*_*z42 12
我有一个三层Android/Java应用程序,几乎和你一样:
上面的每个内容都是一个包含在单个工作区中的独立Eclipse项目.
这是你需要做的:
现在,您的应用应该构建并运行,没有NoClassDefFoundError例外或VFY错误,如下所示:
03-27 21:10:17.120: W/dalvikvm(420): VFY: unable to find class referenced in signature (Labstractionlayer/BaseStationManager;)
03-27 21:10:17.120: W/dalvikvm(420): VFY: unable to find class referenced in signature (Labstractionlayer/BaseStationManager;)
03-27 21:10:17.160: I/dalvikvm(420): Failed resolving Lcom/demo/log/AndroidLogWrapper; interface 253 'Lcommon/Logger/LogWrapper;'
03-27 21:10:17.160: W/dalvikvm(420): Link of class 'Lcom/demo/log/AndroidLogWrapper;' failed
03-27 21:10:17.160: E/dalvikvm(420): Could not find class 'com.demo.log.AndroidLogWrapper', referenced from method com.demo.Application.onCreate
03-27 21:10:17.160: W/dalvikvm(420): VFY: unable to resolve new-instance 218 (Lcom/demo/log/AndroidLogWrapper;) in Lcom/demo/Application;
03-27 21:10:17.170: D/dalvikvm(420): VFY: replacing opcode 0x22 at 0x0003
03-27 21:10:17.170: D/dalvikvm(420): VFY: dead code 0x0005-003c in Lcom/demo/Application;.onCreate ()V
03-27 21:10:17.170: D/AndroidRuntime(420): Shutting down VM
03-27 21:10:17.170: W/dalvikvm(420): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-27 21:10:17.180: E/AndroidRuntime(420): FATAL EXCEPTION: main
03-27 21:10:17.180: E/AndroidRuntime(420): java.lang.NoClassDefFoundError: com.demo.log.AndroidLogWrapper
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在ADT r17之前,您只需要执行上面的步骤1(添加仅Java项目).但是从r17开始,您还需要执行第2步(标记仅用于Java的项目以进行导出).
将依赖项目的名称添加到 Android 项目的 .claspath 文件中。像那样:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry combineaccessrules="false" kind="src" path="/DependentProject1"/>
<classpathentry combineaccessrules="false" kind="src" path="/DependentProject2"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)