集成aar的两种方式:
1、导入aar,使aar作为一个module项目导入,和app同级目录。
这种方式在build.gradle中的dependencies的依赖方式是:
implementation project(':aar的名称');
2、把aar复制到libs文件夹下,然后添加依赖。
这种方式在build.gradle中的dependencies的依赖方式如下面这样:
implementation(或api)(name:'aar名称',ext:'aar',{
exclude group:'com.android.support',module:'support-v4'
})
我使用的是第二种方式,使用中有四个简单的错误。
错误一:
Failed to resolve::aar名称:
Open File
解决:
这个需要在Module:app的build.gradle下添加下面内容:
repositories {
flatDir {
dirs 'libs'
}
}
错误二:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest'.
解决:
这个一般会提示解决方法,如下:
根据建议在AndroidManifest.xml中添加:
<manifest
xmlns:tools="http://schemas.android.com/tools">
<application
tools:replace="android:name">
错误三:
java.lang.NoSuchFieldError: No field xxx of type I in class Lcom/xxxx/module/R$id;
解决:
这个是因为项目中的res资源和aar中的res资源有重名的xml文件。
所以修改主程序或aar中的xml文件名即可。
错误四:
Error: Google Play requires that apps target API level 26 or higher.
解决:
我主项目的targetSdkVersion是27,但是集成aar后,发现里面的部分语音及视频功能在Android7.0的手机上无法正常使用,最后我想尝试下是不是targetSdkVersion版本太高的缘故。修改targetSdkVersion的值时就提示了这个错误警告。 网上搜索的解决方式:https://blog.csdn.net/lancewoo/article/details/87879272。我是直接改成了26,aar包里的功能也可正常使用 。 至于为什么在targetSdkVersion 27的时候,aar个别功能不可用,还不知道原因。