从 aar 中提取 jar for cordova 插件,Class not found error at runtime

Extract jar from aar for cordova plugin, Class not found error at runtime

我有一个 "aar" 文件是使用 gradle 和

生成的
apply plugin: 'com.android.library'

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

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

程序包 "com.example.pkg" 在我的 "classes.jar" 中,但没有 class 调用 "R$raw"。我错过了什么?

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

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

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

是的,提取 classes.jar 是行不通的,它会抛出运行时异常...

我解决问题的方法是:

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

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

然后在应用程序 build.gradle 中指定以下内容并单击同步项目与 Gradle 个文件。

repositories { flatDir { 目录 'libs' } }

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

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