2013-10-21 51 views
0

我有一个gradle项目。 这个项目取决于android sdk。 现在我想为这个项目生成一个jar库,以便在其他android应用程序中使用。将库构建为jar文件

我有这样的文件的gradle:

apply plugin: 'java' 

dependencies { 
    Properties props = new Properties() 
    props.load(new FileInputStream("./local.properties")) 
    compile files(props.get("sdk.dir")+'/platforms/android-18/android.jar') 
} 

是compilig罚款和生成jar文件。我可以将它导入到我的android应用程序项目(同时尝试eclipse和android studio),并且ide可以从我的库中看到类并编译为evryting到apk。 (该库已标记为输出)。其他库(例如TestFlightLib.jar)工作正常。

的问题出现在运行时,它不能从我的图书馆找到类:

java.lang.NoClassDefFoundError: com/solvek/test/MyClass 
     at com.example.jartest.MainActivity.onCreate(MainActivity.java:29) 
     at android.app.Activity.performCreate(Activity.java:5133) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389) 
     at android.app.ActivityThread.access$600(ActivityThread.java:153) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5289) 
     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:739) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.solvek.test.MyClass" on path: DexPathList[[zip file "/data/app/com.example.jartest-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.jartest-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)              

回答

0

我用“机器人库” gradle这个插件,而不是“Java”的解决了这个。它不会在运行时崩溃,但IDE(Android Studio中)不会从我的图书馆认识的类(但它是建立罚款)

我添加了这样的任务到摇篮文件:

task jar(type: Jar) { 
    from android.sourceSets.main.java 
} 

解决方案被发现here

0

为Eclipse: -

如果你已经正确地创建了罐子,做以下操作: -

  1. 拷贝到您的项目的libs文件夹的JAR文件。
  2. 通过进入项目属性并选择java构建路径将此项目添加为jar。
  3. 清理项目并构建。

对于创建jar,你只能导出项目的源代码,没有别的。像drawables,values,layouts等所有其他资源必须相应地复制到您的项目资源中。

告诉我,如果它的工作,如果需要帮助告诉我。