Jetpack GameActivity集成ProGuard引发Native崩溃的问题求助
解决Jetpack GameActivity的ProGuard Native崩溃问题
问题根源
ProGuard混淆时会移除未被Java代码直接引用的方法和字段,但GameActivity的Native层是通过JNI/反射调用这些成员的,ProGuard无法识别这类调用关系,导致必要的方法和字段被误删,引发Native崩溃。
解决方案
不要仅针对单个类写局部规则,直接添加完整的ProGuard配置来保留GameActivity及其关联类的所有成员:
- 在app模块的
proguard-rules.pro中添加以下规则:
# 保留Jetpack GameActivity相关类的所有成员,确保Native层调用正常 -keep class androidx.games.** { *; } -keep class com.google.androidgamesdk.** { *; } # 兜底规则:保留所有包含native方法的类及其方法,覆盖其他JNI相关混淆问题 -keepclasseswithmembernames class * { native <methods>; }
- 确认模块依赖传递:
my-lib中使用api 'androidx.games:games-activity:1.2.1'的配置是正确的,能让app模块继承该依赖的默认配置(包括官方ProGuard规则);如果默认规则未生效,手动添加上述规则即可覆盖。
为什么之前的规则无效?
你之前仅保留了com.google.androidgamesdk.GameActivity类的成员,但Native层还会调用该类继承的父类方法、内部类字段(比如报错中的left字段可能属于GameActivity内部依赖的辅助类),或是androidx.games包下的关联类,局部规则无法覆盖这些场景。
额外验证步骤
构建Release版本后,可通过Android Studio的APK Analyzer查看com.google.androidgamesdk.GameActivity及相关类的成员,确认方法和字段未被移除;若仍有崩溃,根据报错信息定位字段/方法所属类,针对性补充-keep规则。
内容的提问来源于stack exchange,提问作者L.Nam
相关产品推荐
相关产品推荐

