出于上架等要求,需要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.groupproject.android.namespace = packageNameprintln "Namespace set to: ${packageName} for project: ${project.name}"def manifestFile = project.android.sourceSets.main.manifest.srcFileif (manifestFile.exists()) {def manifestText = manifestFile.textif (manifestText.contains('package=')) {manifestText = manifestText.replaceAll(/package="[^"]*"/, "")manifestFile.text = manifestTextprintln "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_8targetCompatibility JavaVersion.VERSION_1_8}}}} }
- java或者kotlin版本不一致问题,这里统一指定为1.8
