目录
背景
- 去年在适配国内渠道的Android15过程中,已做了初步调研和国内最低适配。详情见文章:Android 15 适配整理——实践版
- 在这段时间,项目也已经适配到了目标版本为Android14了。而因为计划要推广谷歌渠道,需要确保应用顺利通过 Google Play 和其他主流应用市场在 Android 15 平台下的审核要求。
- 时间节点:谷歌渠道在8月底(新包送审);到11月(在架包)需要强制要求适配目标API版本到Android15。国内渠道目前暂无要求。
适配内容
简单梳理需要处理的相对比较耗时的适配内容
- View绑定工作【技术债务,工作量大头】
- 解决到kotlin-android-extensions的废弃替代。
- 解决到ButterKnife的废弃替代。
- 替代方案:ViewBinding
- 升级gradle版本,处理新版gradle运行异常问题,
- 一些语法校验(比如条件语句;如数组类型转换。
- 字符串格式化API的参数问题等官方api不兼容问题。
- 升级底层库以及三方库
- 升级适配16kb内存。
- 存在一些第三方库用到so库的问题。
- Android 15新特性:
- 强制edge-to-edge全面屏体验。
- 资源引用需要全限定名。
- 前台服务相关变化 等。
适配计划
优先处理View绑定工作:
- 分批迁移:按模块分批进行,降低风险
- 并行开发:迁移期间新功能使用View Binding
- 充分测试:每批迁移后跟随版本迭代进行测试
意义与价值
虽然迁移工作量较大,但带来的收益明显:
- 技术债务清理:解决累积的技术债务
- 开发效率提升:View Binding提供更好的类型安全
- 项目可维护性:现代化的代码结构更易维护
- 合规性保证:满足Google Play和Android最新要求
前期评估与准备
验证 Gradle 版本
执行命令: ./gradlew --version
Gradle 7.3.3
Build time: 2021-12-22 12:37:54 UTC
Revision: 6f556c80f945dc54b50e0be633da6c62dbe8dc71
Kotlin: 1.5.31
Groovy: 3.0.9
Ant: Apache Ant™ version 1.10.11 compiled on July 10 2021
JVM: 1.8.0_201 (Oracle Corporation 25.201-b09)
OS: Windows 10 10.0 amd64
根据结果:
- Gradle 版本:7.3.3
- JVM 版本:Java 8
ButterKnife 兼容性风险评估——需要废弃替换
严重兼容性问题
官方已废弃
- ButterKnife官方在GitHub首页明确声明:“This tool is now deprecated. Please switch to view binding.”
- 功能开发和一般bug修复已停止,只考虑与AGP集成的关键bug修复
版本落后风险
- 项目使用版本:
com.jakewharton:butterknife:10.0.0
- 官方最新版本:
10.2.3
- 存在潜在的兼容性和安全问题
Android 15适配风险
- ButterKnife已停止维护,不会针对Android 15进行适配优化
- 可能存在与新版本编译工具链的兼容性问题
- 运行时可能出现未知的反射或注解处理问题
kotlin-android-extensions——需要废弃替换
已废弃并停止维护
⚠️ 从 Kotlin 1.4.20-M2 版本开始,kotlin-android-extensions 插件已被官方废弃。
解决移除的异常问题
执行:
apply plugin: ‘kotlin-android-extensions’
A problem occurred evaluating project ':app'.
> No signature of method: build_f60ids97qe6e542qgq7ean07.android() is applicable for argument types: (build_f60ids97qe6e542qgq7ean07$_run_closure1) values: [build_f60ids97qe6e542qgq7ean07$_run_closure1@2ae158c5]
* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':app'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:79)
……
Caused by: groovy.lang.MissingMethodException: No signature of method: build_f60ids97qe6e542qgq7ean07.android() is applicable for argument types: (build_f60ids97qe6e542qgq7ean07$_run_closure1) values: [build_f60ids97qe6e542qgq7ean07$_run_closure1@2ae158c5]
at build_f60ids97qe6e542qgq7ean07.run(...\app\build.gradle:59)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
... 173 more
解决方案:移除掉这块配置内容即可:
androidExtensions {
experimental = true
}
参考资源
官方文档
迁移过程中整理的文档
接下来,会在适配过程中,逐步记录适配过程中的相关内容,并将文章汇总到这里,方便后续查阅。
- Android 15 适配整理——实践版
(目前已整理待发布的相关内容如下:) - kotlin-android-extensions从入门到废弃(深入了解只为把它彻底干掉)
- ButterKnife(黄油刀)从入门到废弃(知己知彼,百战不殆)
- View Binding 详解
- Kotlin Gradle Plugin 说明