适配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
升级Gradle到7.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带来的一些警告。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】