場景:
對於加固包通過tinker進行熱更新,補丁顯示下發生成,並且已經激活,但是補丁實際上沒有生效。
問題:
是什麼原因導致的補丁不能生效?
解決方案:
通過各種原因的排查,最終鎖定在混淆問題上。因爲混淆規則不正確,或者沒有添加tinker的混淆規則。導致代碼混淆後出現異常找不到文件。混淆規則配置如下規則
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
# tinker混淆規則
-dontwarn com.tencent.tinker.**
-keep class com.tencent.tinker.** { *; }
-keep class android.support.**{*;}
如果是補丁下發成功,但是一直顯示沒有激活,那就是簽名有問題,要確保基準包和補丁包簽名一致。在buildTypes裏面配置簽名,可以確保簽名的一致性。
buildTypes {
debug {
buildConfigField "boolean", "IS_DEBUG", "true"
minifyEnabled false
signingConfig signingConfigs.debug
}
release {
buildConfigField "boolean", "IS_DEBUG", "false"
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}