【绝非标题党】Android15适配,太恶心了

3,701 阅读2分钟

东方女性,18岁, 超级漂亮, 程序员,坐在电脑旁.jpeg

前言

最近在将项目适配到Android 15(API 35)的过程中,遇到了不少"坑",整个过程耗时近半年。本文将分享我在适配过程中遇到的三个典型问题及解决方案,希望能帮助正在或即将进行适配的开发者少走弯路。

同行有没有好的方案,分享一下,我之前是一个类一个类的改, 太耗时了。

环境升级

首先,我更新了开发环境:

  • Gradle插件版本:8.7.2
  • Gradle版本:8.9
  • Kotlin版本:2.1.0

问题一:资源引用需要全限定名

现象: 添加namespace后,所有资源引用都需要使用全限定名(Fully Qualified Name),例如:

// 旧代码
titleBar.setRightBtn2Color(ResourceUtils.getColor(R.color.day_mode_text_color3_999999))

// 新代码
titleBar.setRightBtn2Color(ResourceUtils.getColor(com.wallstreetcn.baseui.R.color.day_mode_text_color3_999999))

原因: 这是Android Gradle Plugin 8.0+引入的变更,旨在提高模块化项目的资源隔离性。

解决方案

  1. 批量替换所有资源引用为全限定名
  2. 使用Android Studio的"Find Usages"功能确保不遗漏任何引用

问题二:ButterKnife无法使用

现象: ButterKnife的R2文件无法生成,官方已明确推荐迁移到ViewBinding。

旧代码示例

@BindView(R2.id.edit)
lateinit var edit: CustomTextView
// ...其他绑定

迁移方案

  1. 使用ViewBinding重构:
private lateinit var binding: AuthorActivityMainBinding

override fun doGetContentView(): View {
    if (binding == null) binding = AuthorActivityMainBinding.inflate(layoutInflater)
    return binding.root
}
  1. 对于大型项目,建议:
    • 分模块逐步迁移
    • 编写脚本辅助批量替换
    • 建立代码审查机制确保迁移质量

问题三:kotlin-android-extensions插件废弃

现象: 直接通过控件ID访问视图的方式不再可用,编译报错。

原因: Google已正式废弃kotlin-android-extensions插件,推荐使用ViewBinding替代。

迁移方案

  1. 移除build.gradle中的kotlin-android-extensions插件
  2. 启用ViewBinding:
android {
    buildFeatures {
        viewBinding true
    }
}
  1. 重构代码,使用生成的Binding类访问视图

适配建议

  1. 分阶段迁移:不要试图一次性完成所有适配,可按模块或功能逐步推进
  2. 自动化工具:利用IDE的批量替换和正则表达式搜索功能
  3. 测试覆盖:确保每个修改点都有对应的测试用例
  4. 团队协作:建立适配规范和代码审查流程

总结

Android 15适配确实是一项耗时的工作,特别是对于使用了ButterKnife和kotlin-android-extensions的老项目。但这也是一个优化代码结构、提升应用性能的好机会。ViewBinding不仅解决了当前的问题,还带来了类型安全和空安全等优势。

希望我的经验能对大家有所帮助。如果你在适配过程中遇到了其他问题或有更好的解决方案,欢迎在评论区分享讨论!