从aar中提取jar用于cordova插件,在运行时找不到类错误

时间:2015-06-11 15:07:18

标签: cordova-plugins aar

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

apply plugin: 'com.android.library'

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

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

Package" com.example.pkg"在我的" classes.jar"中,但是没有课堂电话" R $ raw"。我错过了什么?

2 个答案:

答案 0 :(得分:2)

AAR文件不仅包括源,还包含库自包含的Android资源。看看contents of an AAR bundle

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

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

答案 1 :(得分:0)

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

我为解决问题所做的是:

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

让我们说aar文件被复制到libs文件夹中。 (假设文件名是cards.aar)

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

知识库{flatDir {dirs'libs'}}

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

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