适配Android12历程(1)

最近上架google,又给了个警告,app需要适配31,并且在11月份之前必须将targetSdkVersion升到31,否则将不允许上架。

适配Android12需要修改的内容,本文不作详谈,Google官方描述的很清楚。本文主要记录升级Grade到7以上所引起的各种各样的问题,是怎么修改的。

原来的项目用的JDK8 + Gradle5.4.1,还用buildSrc写了一套插件。之前就想升级Gradle,就因为这个buildSrc,一直搁置。这次没办法了,强制升级到7以上,这个插件必须得处理掉了。

没有特别舒服的终极教程,一步步来吧。

 

尝试1:

按照Google的说明升级了targetSdkVersion和compileSdkVersion,给所有组件添加export属性,适配蓝牙权限

——编译失败:Gradle may disable incremental compilation as the following annotation …

JDK版本太低

 

尝试2: JDK升级到11

——编译失败:Unable to load class 'javax.xml.bind.JAXBException'. 

Gradle版本太低(一顿百度、谷歌才发现Grade要强制升级到7以上)

 

尝试3:升级Gradle

升级Gradle7.3.3,将com.android.tools.build:gradle升级到7.2.2,通过修改gradle文件实现插件的核心功能。

去掉gradle.properties中android.enableD8和android.enableR8配置

有一些三方的库是必须要升级的,不然编译不通过:

升级firebase、kotlin插件版本,添加firebase配置:

firebaseCrashlytics {
     strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib'
     unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib'
}

 

升级junit:junit、androidx.test.ext:junit、androidx.test.espresso:espresso-core

项目中有@deprecated修饰的方法和类,也修改下或者直接注释掉。

所有module添加

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

删除shrinkConfig配置

 

至此,项目能够运行到手机,但是build release包r8包错,是MiPush_SDK_Client_3_6_19.jar引起的,这个jar包像是混淆过的,不用再混淆,是在module中引入的jar,可以在module中进行配置。

在module中新建proguard-rules.pro文件,编写如下代码:

-keep class com.xiaomi.** { *; }

在module中的build.gradle中添加

release {
            minifyEnabled true
            consumerProguardFiles 'proguard-rules.pro'
}

 

错误: apk' already contains entry 'META-INF/MANIFEST.MF', cannot overwrite

这个错误需要去掉下面这个配置:

packagingOptions {
       pickFirst 'META-INF/*'
}

并且因为将 androidx.work:work-runtime 升级到了2.7.1,AndroidManifest.xml中需要做如下变动:

<provider
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:authorities="${applicationId}.workmanager-init"
            android:exported="false"
            tools:node="remove" />

替换为

<provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false"
            tools:node="merge">

            <meta-data
                android:name="androidx.work.WorkManagerInitializer"
                android:value="androidx.startup"
                tools:node="remove" />
</provider>

 

后面将会处理升级Gradle带来的一些警告。

 

posted @ 2022-08-30 21:31  呼啸之鹰  阅读(934)  评论(0编辑  收藏  举报