我有一个" 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"。我错过了什么?
答案 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