3

我被android库的东西困住了。

我有

  • 一个专门用于图书馆的项目(我们称之为jokerly)。
  • 带有应用程序的项目(我们称之为 testPhilippe)
  • 从 lib 生成的 jar(我们称之为jokerly.jar)

这个jokerly lib 是一个使用视图、xml、图片和生成文件(例如R.java)的图形库。

我设法启动我的应用程序,在属性/android/library 中导入jokerly lib(项目)没有任何问题。一切正常 - 这是图片:

Eclipse截图android库

另一方面,当我尝试在 java 构建路径中导入jokerly.jar(并从与上述相同的位置删除jokerly lib 项目)时,无论复选框和jokerly.jar 在 properties/javabuildpath/order 和导出中的位置。我也尝试手动将其放入libs文件夹中,但问题是一样的。

Eclipse 截图 javabuildpath

Eclipse 屏幕截图顺序和导出

java.lang.RuntimeException: Unable to instantiate application com.example.testphilippe.Jokerly: java.lang.ClassNotFoundException: Didn't find class "com.example.testphilippe.Jokerly" on path: DexPathList[[zip file "/data/app/com.example.testphilippe-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.testphilippe-2, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:509)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
at android.app.ActivityThread.access$1300(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.testphilippe.Jokerly" on path: DexPathList[[zip file "/data/app/com.example.testphilippe-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.testphilippe-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newApplication(Instrumentation.java:975)
at android.app.LoadedApk.makeApplication(LoadedApk.java:504)
09-11 11:13:37.350: E/AndroidRuntime(22080):    ... 11 more

我尝试了(根据@Vj_Droid 的建议)更多的操作:
我在项目外部的 java 构建路径(而不是 lib 文件夹中)中添加了jokerly.jar。如果未选中复选框,我会遇到同样的错误。如果我检查它,我有以下错误。如果我在 libs 文件夹中手动添加jokerly.jar,然后将其从 libs 文件夹添加到 javabuild paht 中,即使未选中该框,我也会遇到相同的错误(如下)。

[2013-09-11 11:59:42 - TestPhilippe] Error generating final archive: Found duplicate file for APK: AndroidManifest.xml
Origin 1: /Users/markelys/Dropbox/Tech/Projets/Android/Workspace/TestPhilippe/bin/resources.ap_
Origin 2: /Users/markelys/Dropbox/Tech/Projets/Android/Workspace/jokerly.jar

这是我为导出 Jar 文件所做的: Eclipse Jar 导出 Eclipse Jar 导出 2

如果您需要,请随时询问更多信息!

我已经坚持了好几天......任何帮助将不胜感激!

4

2 回答 2

3

根据@TactMayers 链接中的Android Doc (谢谢!),目前不可能:

但是,库项目与标准 Android 应用程序项目的不同之处在于,您不能将其直接编译为自己的 .apk 并在 Android 设备上运行。同样,您不能将库项目导出到自包含的 JAR 文件,就像对真正的库所做的那样。相反,您必须通过在依赖应用程序中引用库并构建该应用程序来间接编译库。

重点似乎是资源和清单,以及所有需要注意的纯 Java 代码。通常是视图、xml 等。似乎有一些计划要添加这种支持,但现在肯定不存在。

因此,如果有人对此有更多信息,以及有关 ADK 团队为此创建事物的更新,那就太好了!

感谢大家的帮助!

于 2013-09-11T12:48:48.197 回答
0
 > Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.testphilippe.Jokerly" ... 

在“订购和导出”页面中,您的 jar 未标记为“将此 jar 复制到 android-apk”,因此类加载器找不到它。设置复选标记,“ClassNotFoundException”将消失。

于 2013-09-11T12:06:43.180 回答