| 維度 | 調試包 (Run) | 發布包 (Generated APK) |
|---|---|---|
| 簽名 | debug.keystore | release keystore / 未簽名 |
| 混淆 | 通常關閉 | **通常開啟 (ProGuard/R8)** |
| 優化 | 無 | 代碼縮減、資源壓縮、ZipAlign |
| Application 類創建時機 | 同 | 同,但類加載順序可能受優化影響 |
proguard-rules.pro:-keep class com.example.model.** { *; }
-keepclassmembers class * implements android.os.Parcelable { *; }
-keepclassmembers class * { @com.google.gson.annotations.SerializedName *; }
AndroidManifest.xml 中 android:initOrder 或多進程初始化邏輯。try-catch 包裹首次讀取,異常時清空重建;或統一簽名測試。adb logcat *:E | grep -i "your.package.name"build/outputs/mapping/release/mapping.txt 定位混淆後類名。classes.dex、resources.arsc、AndroidManifest.xml 是否異常。# 簽名安裝
./gradlew assembleRelease
# 或手動簽名
apksigner sign --ks release.jks --out app-release-signed.apk app-release-unsigned.apk
adb install -r app-release-signed.apk
首啟崩、二啟正,**90% 是混淆或初始化時序問題**。拿到 Crash 日誌,對著 mapping.txt,分分鐘定位。