Play Services Location 11.6.0 ProGuard构建APK失败求助
解决Play Services Location 11.6.0 + AS 3.1.2 构建失败问题
咱们一步步来拆解和解决你遇到的问题,核心矛盾是旧版ProGuard规则与11.6.0版本的Play Services库不兼容,再加上AS 3.1.2的构建工具特性,导致混淆阶段出了问题。
第一步:先找到具体的报错日志(关键!)
你说不清楚日志位置,这是排查的首要障碍,先搞定这个:
- 在Android Studio底部栏点击
Build标签,切换到Build Output面板,点击面板右上角的「Toggle View」(列表样式的图标),找到ProGuard/R8混淆阶段的报错信息,里面会明确显示哪个类/方法被误混淆了; - 或者直接去项目目录的
app/build/outputs/mapping/release/(如果是Release构建)或debug/文件夹,找到proguard-console.log文件,里面是混淆过程的完整日志。
第二步:清理无效规则,添加适配11.6.0的精准混淆规则
你之前用的是6.5版本的旧规则,还加了一堆过于宽泛的keep规则(比如-keep class com.google.** { *; }),这些反而会导致类依赖冲突或混淆逻辑混乱。请按以下步骤调整:
- 先删除所有你手动添加的旧规则和那些过宽的keep规则;
- 在你的ProGuard规则文件中添加以下适配11.6.0版本的规则:
# Play Services Location 11.6.0 核心类保留 -keep class com.google.android.gms.location.LocationRequest { *; } -keep class com.google.android.gms.location.LocationResult { *; } -keep class com.google.android.gms.location.FusedLocationProviderClient { *; } -keep class com.google.android.gms.location.LocationCallback { *; } # Play Services 通用11.x版本规则 -keep class com.google.android.gms.common.api.Result { *; } -keep class com.google.android.gms.common.GoogleApiAvailability { *; } -keep class com.google.android.gms.common.api.ApiException { *; } # 保留Parcelable序列化相关类(避免跨进程/存储时出错) -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } # 保留Google官方注解标记的类/方法 -keep @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } # 忽略Play Services内部未使用类的警告,减少构建干扰 -dontwarn com.google.android.gms.**
第三步:检查Gradle配置兼容性
AS 3.1.2对应的Gradle插件版本是3.1.2,要确保和11.6.0版本的Play Services库兼容:
- 项目根目录的
build.gradle必须配置Google Maven仓库:
allprojects { repositories { google() jcenter() // AS3.1.2仍依赖jcenter,不要删除 } }
- App模块的
build.gradle确认插件版本:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.1.2' } }
第四步:强制使用ProGuard(可选,针对R8兼容问题)
AS 3.0+默认会用R8代替ProGuard,而11.6.0版本的Play Services库对R8的兼容性较差,你可以强制切换回ProGuard:
在App模块的build.gradle中添加:
android { buildTypes { release { useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { // 如果Debug构建也报错,同样开启ProGuard useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
最后验证
做完以上调整后,先执行Clean Project,再Rebuild Project,如果还是报错,就拿着第一步找到的具体日志,针对性地补充keep规则即可。
内容的提问来源于stack exchange,提问作者Mcloving
相关产品推荐
相关产品推荐

