【问题标题】:Build library as jar file将库构建为 jar 文件
【发布时间】:2013-10-21 15:56:57
【问题描述】:

我有一个 gradle 项目。 这个项目依赖于android sdk。 现在我想为这个项目生成一个 jar 库,以便在其他 android 应用程序中使用。

我有这样的 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')
}

编译正常,生成一个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)                

【问题讨论】:

    标签: java android jar gradle


    【解决方案1】:

    我通过使用“android-library”gradle 插件而不是“java”解决了这个问题。它不会在运行时崩溃,但 IDE (Android Studio) 无法识别我的库中的类(但它构建得很好)

    我已将此类任务添加到 gradle 文件中:

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

    找到了解决方案here

    【讨论】:

      【解决方案2】:

      对于日食:-

      如果您正确创建了 jar,请执行以下操作:-

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

      创建jar只需要导出项目源代码即可。所有其他资源,如可绘制对象、值、布局,都必须相应地复制到您的项目资源中。

      告诉我它是否有效,如果需要帮助,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-28
        • 2011-12-21
        • 2012-05-08
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        相关资源
        最近更新 更多