AGP 3.5.3升级到4.2.2问题记录

1.仓库地址不支持http

修改前:

    maven {
        url 'http://maven.aliyun.com/repository/public'
    }

修改后:

    maven {
        allowInsecureProtocol = true
        url 'http://maven.aliyun.com/repository/public'
    }

2.提示androidX 功能未激活

  • This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry.

项目早就支持了androidx,根目录下的gradle.properties已经有如下两行

android.useAndroidX=true
android.enableJetifier=true

但是rebuild后依然报上面的错,找了半天发现老项目的app的module下也有一个gradle.properties,但是里面的android.useAndroidX=false。。。。。。
醉了醉了,把这个多余的gradle.properties删掉就好了。

不知道原先的开发为什么要在app的module下新建gradle.properties,也不知道gradle3.6.x以上的版本为什么用app的module下的gradle.properties

后来在AGP4.2.0更新说明中看到了这么一句话:

gradle.properties 文件的行为变更
从 AGP 4.2 开始,无法再从子项目中替换 Gradle 属性。也就是说,如果您在子项目(而不是根项目)上的 gradle.properties 文件中声明某个属性,该属性将被忽略。

也就是说4.2之前的某些版本会用module下的gradle.properties替换掉project根目录下的gradle.properties,4.2之后的不影响

3.编译时提示资源冲突 Entry name 'xxx' collided

AGP 3.6 以上的版本,在调试开发APP的时候采用了新的打包方式,这里关闭新的打包方式,可以让编译通过

android.useNewApkCreator=false

暂时没有找到更好的办法,先这么干,如果有大佬找到了更好的办法,请告诉我

4.升级至4.1.0后,找不到依赖的module中的R文件

android.namespacedRClass 属性已重命名为 android.nonTransitiveRClass
实验性标记 android.namespacedRClass 已重命名为 android.nonTransitiveRClass。
此标记在 gradle.properties 文件中设置,可启用每个库的 R 类的命名空间,以便其 R 类仅包含库本身中声明的资源,而不包含库的依赖项中的任何资源,从而缩减相应库的 R 类大小。

解决办法:删除gradle.properties中的android.nonTransitiveRClass=true

5.module中的aar无法引用

报错信息如下:Direct local .aar file dependencies are not supported when building an AAR.
The resulting AAR would be broken because the classes and Android resources from any local .aar
file dependencies would not be packaged in the resulting AAR. Previous versions of the Android
Gradle Plugin produce broken AARs in this case too (despite not throwing this error).

修改前aar依赖方式:

    api(name: 'xxxxx', ext: 'aar')   

修改后aar依赖方式:

  1. project根目录下新建一个目录local_aar,拷贝xxxxx.aar到该目录下
  2. local_aar目录下新建一个build.gradle文件,添加以下代码
configurations.maybeCreate("default")
artifacts.add("default", file('xxxxx.aar'))
  1. settings.gradle添加local_aar目录
include(":local_aar")

4.在module中添加对local_aar的依赖

api project(":local_aar")

还有一种方案是将aar发布到maven进行远程依赖

可以参考:Direct local .aar file dependencies are not supported

5.Execution failed for task ':minifyPreviewReleaseWithR8'.

[CIRCULAR REFERENCE:com.android.tools.r8.utils.b: Expected [access-flag]* void at C:\Users\DT.gradle\caches\transforms-3\fd8ee676f15f0d57578a9e28a336cbac\transformed\pol
yvPlayer-2.15.2\proguard.txt:95:42
public PolyvAuxiliaryVideoView ;

解决办法: polyvPlayer升级至net.polyv.android:polyvPlayer:2.15.3

6.升级至7.x后出现'元素类型 "uses-sdk" 必须后跟属性规范 ">" 或 "/>"

这个问题还未解决,应该是某个第三方library中manifest不规范少写了尖括号导致的

参考:

Android agp 对 R 文件内联支持

Android Gradle 插件版本说明

你可能感兴趣的:(AGP 3.5.3升级到4.2.2问题记录)