1. edgetoedge问题解决
在页面style文件中添加下面代码 关闭此功能
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
2. ProGuard/R8 的混淆行为导致部分类找不到
背景
R8 优化更激进 AGP 8.x 默认启用 R8 的完整优化模式(包括代码缩减、混淆、优化)
相比旧版 ProGuard,R8 的以下行为可能导致问题:
更彻底的代码移除:未通过显式规则保护的反射/JNI调用类会被删除
字段/方法名混淆强度提升:尤其是非公开的成员,可能被重命名为短无意义字符(如
a.b())内联和合并优化:R8 可能将多个小类合并或内联方法,破坏原有逻辑
默认规则变化 AGP 8.4.2 的默认配置文件
proguard-android-optimize.txt更新了保留规则,例如:
对 AndroidX、Kotlin 协程等库的保留规则更严格
旧版中隐式保留的类(如
Activity)可能需要显式声明-keepJava/Kotlin 新版本兼容问题 Gradle 8.9 默认支持 Java 17+,若项目中使用新语言特性(如
record、sealed class),旧混淆规则可能失效
解法
临时禁用优化定位问题
在 gradle.properties 中关闭 R8 优化:
android.enableR8.fullMode=false
3. compileOnly限制增强
背景
**
compileOnly的限制增强 AGP 8.4.2加强了对compileOnly依赖的检查,若该依赖包含Android组件(如Activity、Service等)或资源文件**,则必须使用implementation或api,否则会导致编译或运行时崩溃依赖内容分析
com.miui:system:dev-SNAPSHOT可能包含以下内容:
Android组件或资源:如布局文件、资源ID等。
AIDL接口或JNI库:这些需要打包到APK中。
运行时必需的类:例如
com.milink.api.v1包下的重复类(此前问题可能被旧版本AGP忽略)AGP 7.x与8.x的差异 AGP 7.x对
compileOnly的检查较宽松,允许部分运行时依赖声明为compileOnly,但AGP 8.x(尤其是8.4+)会严格校验此类配置
4. 资源引用无法使用switch-case
背景
AGP 8.0+ 的资源 ID 非 final 化
在 AGP 8.0 之前,应用模块(Application Module) 生成的
R.java文件中的资源 ID 是public static final int,可在switch-case中作为常量使用AGP 8.0 及更高版本(包括 8.4.2)中,为了优化构建性能和包体积,应用模块的资源 ID 也变为 非 final(
public static int)由于
switch-case的case标签要求表达式必须是编译时常量(final),因此会触发编译错误:case expressions must be constant expressions。
修改
android.nonFinalResIds=false
5. enableFeaturePreview("VERSION_CATALOGS")
旧版 Gradle(7.4 之前):Version Catalog 是实验性功能,需通过 enableFeaturePreview("VERSION_CATALOGS") 显式启用,否则无法使用
Gradle 7.4+:Version Catalog 功能已稳定,无需手动启用(但部分文档仍建议保留该配置以确保兼容性)
Gradle 8.0+:该功能完全集成到 Gradle 核心中,enableFeaturePreview 调用已无意义,可删除
6. android.bundle.enableUncompressedNativeLibs=false
- 在项目的
build.gradle文件中找到以下配置并删除
android {
bundle {
enableUncompressedNativeLibs = false // 删除这行
}
}
- 在gradle.properties中确保没有以下配置
android.bundle.enableUncompressedNativeLibs=false
该选项原本用于控制APK中native库是否压缩,自AGP 4.0起默认启用压缩,但Android App Bundle格式要求不压缩。AGP 8.1移除了该选项,现在强制使用未压缩的native库以适配新的应用分发格式要求
7. 升级gradle java版本需配置17
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':BaiduSearchBridge:compileDebugKotlin'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:293)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:459)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:376)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 1.8) and 'compileDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.
Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain
8. 自定义BuildConfig字段在gradle8.0中被禁用
问题描述
* What went wrong:
A problem occurred configuring project ':Browser'.
> defaultConfig contains custom BuildConfig fields, but the feature is disabled.
To enable the feature, add the following to your module-level build.gradle:
`android.buildFeatures.buildConfig true`
解决
在模块级build.gradle文件的android{}块内添加以下配置:
android {
buildFeatures {
buildConfig true // 强制启用BuildConfig生成[9,11](@ref)
}
}
错误提示明确指出你的:Browser模块在defaultConfig中定义了自定义BuildConfig字段,但该功能当前被禁用。该问题主要与Gradle 8+版本的默认配置变更有关
9. 缺少namespace字段
与AndroidManifest.xml中的package保持一致
有时也可使用自动化工具 AGP Upgrade Assistant
下面两种方法打开都可以
选择Set namespace from AndroidManifest 有时候因为AGP版本已经更新,这个选项可能不存在了,需要手动适配
10. aidl目录默认不开启
需在build.gradle文件中开启
android {
buildFeatures {
aidl true
}
}
11.不建议在AndroidManifest.xml中写package
Incorrect package="com.android.browser" found in source AndroidManifest.xml: D:\com\android\mibrowser\plugin\src\main\AndroidManifest.xml.
Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported.
Recommendation: remove package="com.android.browser" from the source AndroidManifest.xml: D:\com\android\mibrowser\plugin\src\main\AndroidManifest.xml.
如果模块中build.gradle中的namespace和AndroidManifest.xml中的package命名不一致,则会报这个错误 gradle及AGP升级问题记录