我有这样的设置:
NativeLibrary CommonJavaComponents
| | | |
| | | |
| FunctionalLibrary1 |
| | |
----------Project---------
起初稍微复杂,但这是我最简单的设置之一。
NativeLibrary
包含.so文件和jni jars CommmonJavaComponents
包含自定义的Activity / Fragment祖先和android-support-v13.jar FunctionalLibrary1
使用上述两种方法,并提供项目Project
直接引用所有3。我设法通过导出“Android私有库”来编译所有内容。
不幸的是,在我的设备上我得到了这个:
05-22 16:52:50.110: W/dalvikvm(3215): Unable to resolve superclass of Lcom/test/library/common/activity/LoggingActivity; (50)
05-22 16:52:50.110: W/dalvikvm(3215): Link of class 'Lcom/test/library/common/activity/LoggingActivity;' failed
LoggingActivity
位于CommonJavaComponents
,并从android-support-v13.jar扩展FragmentActivity
有人知道我需要执行什么魔法,或者ADT 22是否只是简单破碎?
编辑
简明扼要:
NativeLibrary,CommonJavaComponents,FunctionalLibrary1都导出了 Android私有库。 Project
引用所有三个,它编译但仍显示上述错误。
答案 0 :(得分:3)
我还获得了ARCA的ClassNotFoundExcpetion。 ACRA jar位于我们的一个核心库项目中,并从该中心位置导入到应用程序项目中。
在我的情况下,在设备上卸载和安装应用程序(由Graeme建议)并未改变任何内容。如果情况确实如此,这将使App用户无法进行更新,而ADT 22将无法用于生产。
我可以在几个项目中追踪问题,因为我们明确地将jar文件添加到Java Build Path。这个2011年在libs文件夹中处理jar的习惯(我猜在ADT 17之前)已经在我们的应用程序的许多地方保留了。
我设法使用ADT 22和工具17运行项目,只需用以下内容替换和标准化所有库项目的.classpath文件:
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
所有jar文件都被删除,“Private Libraries”必须像许多其他人之前所说的那样导出。
这是使用API目标17项目测试的:
android.library=true
target=android-17
如果您查看剩余问题,请尝试对根应用程序项目(即您尝试运行的非库项目)执行相同的操作
要添加的一件事:在您设法编译并运行您的应用程序之后,您可能会在更新libs文件夹中的jar后在Eclipse的“Problems”视图中看到:
The container 'Android Private Libraries' references non existing library '.../FINARXAndroidWidgets/libs/jackson-core-2.1.1.jar'
用户无法编辑库变量的内容。唯一帮助我的是重启eclipse。
关于这一点的坏处是,它可能也发生在其他人工作区的SVN / GIT更新之后。
答案 1 :(得分:0)
卸载应用并重新安装似乎修复了它。 Android / Eclipse似乎无法在更改其依赖库的导出设置时看到更改,因此无法正确重建或重新安装。
要确认,工作设置涉及Project
将每个依赖库直接引用为Android Libraries
。每个项目(甚至包括Project
虽然不应该影响任何东西)都使用export Android Private Libraries 。
与ADT 16的更新一样 - 这应该包含一个大的闪烁警告,说“这将打破你的项目设置 - 请等到你没有处于发布周期”