【问题标题】:Extract jar from aar for cordova plugin, Class not found error at runtime从aar中提取jar以获得cordova插件,运行时找不到类错误
【发布时间】:2015-06-11 15:07:18
【问题描述】:

我有一个使用 gradle 生成的“aar”文件

apply plugin: 'com.android.library'

现在我想使用这个 aar 库来创建一个 cordova 插件。我解压缩 aar 文件,得到一个“classes.jar”并将 jar 放入 cordova 的“libs”目录。我的cordova项目编译没有任何问题,我可以在jar文件中导入和使用类。但它在运行时崩溃并出现以下错误

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/pkg/R$raw;

包“com.example.pkg”在我的“classes.jar”中,但没有类调用“R$raw”。我错过了什么?

【问题讨论】:

    标签: cordova-plugins aar


    【解决方案1】:

    AAR 文件不仅捆绑了源代码,还捆绑了自包含 Android 资源的库。看看contents of an AAR bundle

    您的原始 AAR 文件似乎包含一些未包含在 jar 中的 raw 资源。您不能将 Android 资源打包到 .jar 文件中,因此当您的应用程序需要访问为资源生成的 ID 时,它会崩溃。

    您可以通过打开原始 AAR 文件(它只是一个 zip 存档)来检查这一点。查看 res 文件夹下的库所需的任何资源。

    【讨论】:

    • 你是绝对正确的。现在我的问题变成了如何包含整个 AAR 文件,而不仅仅是将提取的 JAR 包含到我的 cordova 插件中。
    【解决方案2】:

    是的,提取 classes.jar 不起作用,它会抛出 runtimeexceptions...

    我解决问题的方法是:

    cordova项目创建后,添加平台,添加插件就完成了。

    假设 aar 文件被复制到 libs 文件夹中。 (假设文件名为cards.aar)

    然后在 app build.gradle 中指定以下内容并点击同步项目与 Gradle 文件。

    存储库 { flatDir { dirs 'libs' } }

    依赖{ compile(name:'cards', ext:'aar') }

    它对我有用!但此解决方案的一个缺点是..您需要从 Android Studio 上的平台文件夹打开项目并将上述行添加到您的 build.gradle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2015-06-15
      • 2020-03-20
      • 2022-01-03
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多