求助:Ionic 1应用从Google Play安装后首次启动崩溃,后续运行正常
解决Ionic 1应用Google Play安装后首次启动崩溃问题
这个问题我之前帮不少开发者排查过,本质是Google Analytics的安装来源跟踪(Campaign Tracking)组件在首次启动时无法被正确加载导致的——Google Play安装应用后会发送INSTALL_REFERRER广播触发接收器,但对应的类找不到就会崩溃;后续启动没有这个广播,自然就正常运行了。下面是具体的排查和修复步骤:
1. 确保Google Play服务依赖版本一致
Ionic 1中通常用cordova-plugin-google-analytics集成GA,插件依赖的Google Play服务版本如果和项目全局依赖冲突,就可能引发类加载失败:
- 打开项目的
config.xml,检查插件声明是否指定了稳定版本,比如:<plugin name="cordova-plugin-google-analytics" spec="~1.8.3" /> - 查看
platforms/android/build.gradle,确保com.google.android.gms:play-services-analytics的版本和其他Google服务依赖(比如地图、推送等)保持一致,避免版本不兼容。
2. 调整ProGuard混淆规则(如果启用了混淆)
ProGuard默认会混淆第三方库的类,GA的接收器类被混淆后就会出现NoClassDefFoundError。在platforms/android/proguard-rules.pro中添加以下规则:
# 保留Google Analytics相关类不被混淆 -keep class com.google.android.gms.** { *; } -keep class com.google.analytics.tracking.** { *; } -dontwarn com.google.android.gms.**
添加后重新构建发布包,确保GA核心类不会被混淆。
3. 验证AndroidManifest中的接收器注册
虽然cordova-plugin-google-analytics应该自动注册CampaignTrackingReceiver,但偶尔会出现注册异常。打开platforms/android/AndroidManifest.xml,确认存在以下配置:
<receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />
如果没有,手动添加后重新构建。
4. 清理构建缓存并重新打包
旧的构建缓存可能导致依赖没有被正确打包到APK中,执行以下命令清理后重新构建:
cordova clean android cordova build android --release
5. 模拟首次启动场景验证修复
为了确认修复有效,可以用ADB模拟Google Play发送的INSTALL_REFERRER广播,复现首次启动的情况:
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n 你的应用包名/com.google.android.gms.analytics.CampaignTrackingReceiver --es "referrer" "utm_source=test&utm_medium=test"
如果执行后应用没有崩溃,说明修复成功。
内容的提问来源于stack exchange,提问作者Tom Kur
相关产品推荐
相关产品推荐

