Android Studio 中 .AAR 内 class 运行时的 NoClassDefFoundError

NoClassDefFoundError at Runtime on class inside .AAR in Android Studio

我已经研究了很多小时来寻找可能的解决方案,但无论我尝试什么都失败了。这是解释的情况:

我在 Android Studio 上有这个库项目,它生成 app-debug.aar 文件。 然后我在实施项目中添加这个新模块,按照向导导入 .JAR/.AARs 我选择 .aar 并在项目结构中更新 :app 的依赖关系。

一旦项目被清理(即使使用 ./gradlew clean--Mac OS X)我可以在任何活动。

现在在运行时,一旦构建并安装在真实设备上,应用程序将崩溃并抛出上述运行时异常。

注意:我正在导入 .aar 因为我需要保护代码并且它有资源所以 .jar 是不可能的。如果我导入库模块(使用源和全部而不是 .aar),那么应用程序在运行时没有问题。

我已经尝试了所有方法,如果有人能说明这可能是什么,我们将不胜感激。

class 扩展了 ViewGroup 并在运行时实例化以防万一。代码已提供给我,因此除非绝对必要,否则可能无法进行重大更改。

先谢谢大家!

阿曼多

我在问题 ("Class A") 中提到的 class 使用的向后兼容库实际上已经发生了 NoClassDefFound 错误。除了 Class 找不到其他细节外,没有给出其他细节,后来发现另一个 class 有类似的问题,但指向具有相同异常的兼容库,我注意到 Class A 也在调用它的方法并实现它的回调。通过提高 min version(使用本机 API)我可以克服这个问题。在 .aar 左右包含那个向后编译库确实是一个问题。如果我能更好地理解这个问题,我会更新这个 "answer."

对于那些仍在寻找解决方案的人,以下两个选项对我有用,可以解决与 OP 提到的完全相同的问题。

  • 也在目标模块中包含(有问题的)库依赖项,即在我的情况下,我将 protobuf-lite 作为我的库模块的依赖项包含在内,但得到 noclassdefFound在应用程序模块中将 lib 导入为 .aar 时出错。作为一种变通方法,我也将 protobuf-lite 依赖项添加到我的应用程序模块中,并且效果很好。

  • 第二个选项对我有用,我没有添加 gradle 依赖`compile 'com.google.protobuf:protobuf-lite:3.0.1',而是从 maven 下载了 protobuf-jar 并手动添加到库中我的库模块,问题解决了。

不知道 gradle 插件有什么问题,但希望它能帮助其他寻找相同问题的人。