【问题标题】:java.lang.ClassNotFoundException on custom library自定义库上的 java.lang.ClassNotFoundException
【发布时间】:2018-03-02 11:27:45
【问题描述】:

我创建了一个库,而这个库使用了另一个外部库(只有一个)。

这是我的库的配置:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 26

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    compile ('com.github.Paroca72:sc-gauges:3.0.1') {
        transitive=true
    }
}

使用 gradle -> :library -> assembleRelease 将库导出为 .aar。 现在使用“import .JAR/.AAR package”将该库包含在一个新项目中,并将其包含在“module dependency”中..

在编码阶段我没有错误,但是当我尝试启动应用程序时,我遇到了这种异常:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sccomponents.codes.gauges.ScArcGauge" on path: DexPathList[[zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/base.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_dependencies_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_0_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_1_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_2_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_3_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_4_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_5_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_6_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_7_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_8_apk.apk", zip file "/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.test.test-oKxgn-etFOgh1n6SqKQU5Q==/lib/x86, /system/lib, /vendor/lib]]

引用了我自己的库中包含的外部库“com.sccomponents.codes.gauges.ScArcGauge”..

怎么了?

我正在使用 Android Studio(最新版本)

【问题讨论】:

  • 你能告诉我app模块的build.gradle中生成的代码吗? Android Studio 添加的库的导入行
  • 启用multidex后尝试。
  • 这是库的 gradle:configurations.maybeCreate("default") artifacts.add("default", file('library-release.aar')) 这包含在项目中: 实施项目(':gr001')
  • 我已经尝试在任何地方启用 multidex 但没有成功.. 谢谢

标签: android shared-libraries aar


【解决方案1】:

很可能当您通过 Android Studio 包含您的库时,您最终会得到类似的东西

compile 'yourlibrary":1.0.0@aar'

所以这意味着只有 aar 将被拉入,而不是您的依赖项。您需要将其更改为

compile ('yourlibrary":1.0.0@aar'){ transitive=true }

【讨论】:

  • 我的库里面的外部库是:compile ('com.github.Paroca72:sc-gauges:3.0.1') { transitive=true }..我必须在这上面加上@aar?
  • 不,你没有。您图书馆的 gradle 似乎很好。也许您在包含它时遇到问题。尝试从您的应用程序 build.gradle 中删除任何额外的东西,清理项目并重新添加库。谁知道,可能会有所帮助
【解决方案2】:

请按照以下步骤操作。

  1. 右键单击您的项目并选择属性。
  2. 从左侧菜单中选择 Java 构建路径。
  3. 选择“订购和导出”选项卡。
  4. 确保从列表中检查您添加到项目中的库或外部 jar。
  5. 最后,清理您的项目并运行。

可能是因为它没有在运行时添加库。

【讨论】:

  • 非常抱歉:我忘了说我使用的是Android Studio
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多