1. 程式人生 > >程式碼混淆導致程式崩潰原因分析

程式碼混淆導致程式崩潰原因分析

程式碼混淆是一種專案加密的方法,混淆後的類和方法會重新命名成a.a.b.c的形式,從而防止反編譯破解程式碼。
如果程式碼中使用了反射或者呼叫了JNI等底層程式碼,程式碼混淆會導致程式崩潰,

例如使用JSONObject.toJavaObject()方法將json轉化為物件時,底層會利用反射機制完成轉化,混淆後的程式碼就無法完成反射,從而導致物件的轉換失敗,丟擲空指標異常。

錯誤程式碼

val pic = JSONObject.toJavaObject(json as JSONObject, PicInfo::class.java)


解決方案1:手動解析json

val pic = PicInfo()
pic.setPicOutUrl((json as JSONObject).getString("picOutUrl"))
pic.setPicUrl(json.getString("picUrl"))

解決方案2:對這個方法所牽扯到的類取消混淆

取消混淆的方法:
在proguard-rules.pro檔案中新增
-keep class 包名.** { *; }