具有项目依赖项的 Eclipse/ADT 下的 Android Activity (解析 XY 失败)

标签 android eclipse apk adt multiple-projects

我试图让一个游戏项目完全独立于平台,所以我将它分成三个项目,从低级别到顶级 android 特定级别,例如:引擎、游戏、android 游戏。

错误中涉及的类/接口(interface)是那些:

  1. (低级)引擎项目定义了这个接口(interface):

    com.myteam.engine.IGame
    
  2. (中级)平台独立游戏项目定义了那些类:

    com.myteam.myproject.Game
    com.myteam.myproject.MyProject (derived from com.myteam.myproject.Game)
    
  3. (顶层)android项目实现activity等:

    com.myteam.myproject.android.MyAndroidActivity (using com.myteam.myproject.MyProject)
    

所有编译都很好并且在 Windows 下完美运行(另一个 Windows 项目在 3 级使用前两个)。

但是当使用 ADT 运行时,它会在 Activity 启动时在运行时失败。 Android 应用程序基本上只显示带有“NoClassDefFoundError com.myteam.myproject.MyProject”异常的调用堆栈。

异常似乎是由其父类(super class)(或父类(super class)的接口(interface))在加载/解析时引起的,如 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)

我尝试按照其他帖子和论坛中的描述,在 Android 游戏项目的“Build Path/Order and Export”Eclipse 项目设置下添加前两个项目,但这并没有改变任何事情。

我的预感是 list 或项目设置需要再次提及 apk 打包或运行时的包/类依赖项。有什么想法吗?

最佳答案

我有一个三层的 Android/Java 应用程序,几乎和你一样:

  1. 用于低级网络通信的纯 Java 项目
  2. 用于抽象低级项目功能的纯 Java 项目
  3. 安卓应用

上面的每件事都是一个单独的 Eclipse 项目,包含在一个工作区中。

这是您需要做的:

  1. 在应用程序的项目属性->Java 构建路径->项目下,添加纯 Java 项目
  2. 在 App 的项目属性->Java 构建路径->订购和导出下,勾选 Java-only 项目(将其标记为导出)

现在,您的应用程序应该可以构建和运行,不会出现如下所示的 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

顺便说一句,在 ADT r17 之前,您只需执行上面的步骤 1(添加纯 Java 项目)。但是从 r17 开始,您还需要执行第 2 步(将仅限 Java 的项目标记为导出)。

关于具有项目依赖项的 Eclipse/ADT 下的 Android Activity (解析 XY 失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581627/

相关文章:

android - ConsumerIrManager.transmit 在 Lollipop 中损坏?

c++ - 在 C++ 中使用已删除的函数

java - Maven + Eclipse : Adding exclusions

cordova - 无法将 Phonegap Build APK 上传到 play.google - 您上传了一个可调试的 APK 错误

android - 应用已安装但未出现

android - 将数据从 Activity 发送到另一个 Activity 而不启动它

android - 一种布局覆盖另一种布局

java - 私有(private)嵌套类的可访问性

android - Fabric BETA 已更新,现在我无法安装我的应用程序,无论是 BETA、Android Studio 还是 apk

android - 我的应用程序中显示的空 map