【问题标题】:Why the lib module can't include the 3rd lib in android studio为什么 lib 模块不能在 android studio 中包含第三个 lib
【发布时间】:2017-07-14 22:29:57
【问题描述】:

我有一个问题
java.lang.NoClassDefFoundError:解析失败:Lorg/apache/commons/lang/StringUtils;”
当我尝试运行依赖于我自己的 android 库的 android 应用程序时。
以下是我的步骤:
创建了一个android项目,然后在其中构建了一个名为“sptvlib”的新模块。
此模块依赖于名为“common-lang”的第 3 方库,它是一个 String utils 库。请参阅“sptvlib”gradle 文件:

dependencies {
   ...
   compile 'org.apache.directory.studio:org.apache.commons.lang:2.6'
   ...
}

构建整个项目后,我得到了模块sptvlib.aar文件,并将其复制到另一个android应用项目的“libs”目录中。

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
...
    compile(name: 'sptvlib', ext: 'aar')
...
}

我成功构建了这个应用程序,但是当它运行时,logcat 显示“java.lang.NoClassDefFoundError”错误。 我必须将“commons.lang”声明重新添加到应用程序项目 gradle,然后它运行正常......我们已将第 3 方库添加到我的模块中,使用“已编译”。为什么依赖我自己的模块的应用程序仍然无法在运行时找到它?

【问题讨论】:

    标签: android android-studio


    【解决方案1】:

    我假设您在主应用程序项目中使用了 commons.lang 的某些功能。

    由于您使用的是 sptvlib 库的已编译汇编代码,因此您可以在主应用项目中使用 sptvlib 的已编译公开函数。

    但是您不能直接在您的主应用项目中访问 c​​ommons.lang 的库函数。 这是因为您尚未将 sptvlib 代码作为模块添加到您的应用项目中。您只使用了 sptvlib 的编译版本。

    【讨论】:

    • 所以...我构建的“sptvlib.aar”不是真正的库,如“rxjava”和“retrofit”等...如果其他一些应用程序使用“ sptvlib”依赖于“commons.lang”库并运行正常,我们需要在每个应用程序项目中创建一个新模块并在其中复制“sptvlib”代码,还是我弄错了?你能有一些样本来帮助我吗?如何创建一个“真正的”库?谢谢^_^
    • 如果其他一些应用程序使用依赖于“commons.lang”库的“sptvlib”的功能应该可以正常工作。但是你不能直接在应用中使用“commons.lang”的功能。
    • 我的应用不直接使用3rd lib的功能,只调用sptvlib的一些依赖3rd lib的方法...
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多