升级目标API级别到35,以Android15为目标平台(二 先行篇)

背景

  • 去年在适配国内渠道的Android15过程中,已做了初步调研和国内最低适配。详情见文章:Android 15 适配整理——实践版
  • 在这段时间,项目也已经适配到了目标版本为Android14了。而因为计划要推广谷歌渠道,需要确保应用顺利通过 Google Play 和其他主流应用市场在 Android 15 平台下的审核要求。
  • 时间节点:谷歌渠道在8月底(新包送审);到11月(在架包)需要强制要求适配目标API版本到Android15。国内渠道目前暂无要求。
    在这里插入图片描述

适配内容

简单梳理需要处理的相对比较耗时的适配内容

  1. View绑定工作【技术债务,工作量大头】
    • 解决到kotlin-android-extensions的废弃替代。
    • 解决到ButterKnife的废弃替代。
    • 替代方案:ViewBinding
  2. 升级gradle版本,处理新版gradle运行异常问题,
    • 一些语法校验(比如条件语句;如数组类型转换。
    • 字符串格式化API的参数问题等官方api不兼容问题。
  3. 升级底层库以及三方库
    • 升级适配16kb内存。
    • 存在一些第三方库用到so库的问题。
  4. Android 15新特性:
    • 强制edge-to-edge全面屏体验。
    • 资源引用需要全限定名。
  5. 前台服务相关变化 等。

适配计划

优先处理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
}

参考资源

官方文档

  1. View Binding 官方指南
  2. Android 15 适配指南
  3. Kotlin 编码规范

迁移过程中整理的文档

接下来,会在适配过程中,逐步记录适配过程中的相关内容,并将文章汇总到这里,方便后续查阅。

  • Android 15 适配整理——实践版
    (目前已整理待发布的相关内容如下:)
  • kotlin-android-extensions从入门到废弃(深入了解只为把它彻底干掉)
  • ButterKnife(黄油刀)从入门到废弃(知己知彼,百战不殆)
  • View Binding 详解
  • Kotlin Gradle Plugin 说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值