Android:jar库与项目库相比不起作用

时间:2013-09-11 09:28:11

标签: java android eclipse jar project

我陷入了android库的困境。

我有

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

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

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

Eclipse screenshot android library

另一方面,当我尝试在java构建路径中导入jokerly.jar(并从上面的同一个地方删除jokerly lib项目)时,我有一个classNotFound异常,无论状态如何复选框和jokerab.dar在属性/ javabuildpath / order和export中的位置。 我也尝试手动将它放在libs文件夹中,但问题是一样的。

Eclipse screenshot javabuildpath

Eclipse screen shot order and export

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建议)更多的manips:
我在项目外部的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 Export Eclipse Jar Export 2

如果您需要,请随时提出更多信息!

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

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

感谢大家的帮助!

答案 1 :(得分:0)

 > Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.testphilippe.Jokerly" ... 

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