💡
原文中文,约4600字,阅读约需11分钟。
📝
内容提要
升级 Android targetSDK 至 35 和使用 Gradle 8.0+ 后,需在 build.gradle 中显式声明 namespace,因 AndroidManifest.xml 中的 package 属性已不再支持。解决方案包括自动设置 namespace、启用 buildConfig 特性及迁移配置,以确保第三方库符合新要求。
🎯
关键要点
- 升级 Android targetSDK 至 35 和使用 Gradle 8.0+ 后,需在 build.gradle 中显式声明 namespace。
- AndroidManifest.xml 中的 package 属性已不再支持,导致构建失败。
- 解决方案包括自动设置 namespace、启用 buildConfig 特性及迁移配置。
- 自动设置 namespace 使用 project.group 替代点号为下划线。
- 在构建前自动执行修复,确保所有第三方库符合 Gradle 8.0+ 的要求。
- 适用场景包括 React Native 和 Flutter 项目升级、使用 Detox 测试框架的项目等。
- 此方案会自动修改第三方库的 build.gradle 和 AndroidManifest.xml 文件。
- 建议在 CI/CD 中首次构建后检查修改是否正确。
- 简化方案仅在内存中设置 namespace,不会修改任何文件。
❓
延伸问答
为什么在升级 Android targetSDK 至 35 时会遇到 namespace 配置问题?
因为 Android Gradle Plugin 8.0+ 不再支持在 AndroidManifest.xml 中通过 package 属性设置 namespace,必须在 build.gradle 中显式声明。
如何在 build.gradle 中显式声明 namespace?
在项目根目录的 android/build.gradle 文件中添加代码,自动设置 namespace,启用 buildConfig 特性,并迁移配置。
适用哪些项目场景需要进行此升级?
适用场景包括 React Native 和 Flutter 项目升级、使用 Detox 测试框架的项目等。
此方案对第三方库的影响是什么?
此方案会自动修改第三方库的 build.gradle 和 AndroidManifest.xml 文件,但仅在 node_modules 中生效,不影响源码仓库。
如何验证修改是否正确?
建议在 CI/CD 中首次构建后检查修改是否正确,可以通过执行 'cd android && ./gradlew clean && ./gradlew assembleDebug' 来验证。
简化方案与完整方案有什么区别?
简化方案仅在内存中设置 namespace,不会修改任何文件,可能无法解决所有第三方库的问题,而完整方案会自动修改相关文件。
➡️