android开发将项目升级到target35的解决方法
出于上架等要求,需要android项目升级target 35以上,target 35默认需要gradle 8.x之后才能编译成功,下面提供两种解决方法
1. 如何只升级target到35,不需要升级gradle到8.x也能编译成功呢,毕竟升级gradle一般要处理不少问题,特别是升级到gradle 8.x,需要改动的东西不少
- 具体参考别人家的这篇文章吧:https://juejin.cn/post/7534903589255069722 ,主要内容就是:
-
- 处理编译报错问题
-
- 在gradle.properties文件强制指定aapt2版本问题:
# gradle.properties android.aapt2FromMavenOverride=/Users/xxx/Android/sdk/build-tools/35.0.1/aapt2
-
- 因为步骤2出现了硬编码,可以使用gradle脚本实现,别人都写好了fixTarget35.gradle:https://gist.github.com/sickworm/ee2d64b12a770a88e7c860ae4058634a
-
- R8 编译失败,网上的解决方案是指定 R8 版本:
buildscript { repositories { maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath 'com.android.tools:r8:8.4.27' } }
-
2. 老老实实升级到gradle 8.x版本,不过改修东西比较多,这里简单记录一些
-
- 缺少namespace问题,针对这个问题,可以通过gradle在编译期间强制指定,具体可以参考::https://blog.csdn.net/weixin_43952004/article/details/143177043
subprojects { afterEvaluate { project -> if (project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application')) { println "project: ${project.name} Namespace get: ${project.android.namespace}" def packageName = project.android.namespace ?: project.android.defaultConfig.applicationId ?: project.android.sourceSets.main.manifest.srcFile.text.find(/package="([^"]*)"/) ?: project.group project.android.namespace = packageName println "Namespace set to: ${packageName} for project: ${project.name}" def manifestFile = project.android.sourceSets.main.manifest.srcFile if (manifestFile.exists()) { def manifestText = manifestFile.text if (manifestText.contains('package=')) { manifestText = manifestText.replaceAll(/package="[^"]*"/, "") manifestFile.text = manifestText println "Package attribute removed in AndroidManifest.xml for project: ${project.name}" } else { println "No package attribute found in AndroidManifest.xml for project: ${project.name}" } } else { println "AndroidManifest.xml not found for project: ${project.name}" } } } }
- 缺少namespace问题,针对这个问题,可以通过gradle在编译期间强制指定,具体可以参考::https://blog.csdn.net/weixin_43952004/article/details/143177043
-
- java或者kotlin版本不一致问题,这里统一指定为1.8
allprojects { repositories { google() mavenCentral() maven { url 'https://maven.aliyun.com/repository/central' } maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google'} maven { url 'https://maven.aliyun.com/repository/gradle-plugin'} } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions.jvmTarget = '1.8' } afterEvaluate { project -> if (project.hasProperty('android')) { android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } } } }
- java或者kotlin版本不一致问题,这里统一指定为1.8