日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android开发Proguard混淆与反射

發布時間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android开发Proguard混淆与反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://charles-tanchao.diandian.com/post/2012-05-24/20118715

由于前面開發數據操作類,所以利用反射,封裝了一個BaseDao,本來在平常的時候,調試都沒有出問題,可是直到用了?Proguard混淆以后,就出現各種錯誤,最開始是類型轉換錯誤,到了后面就變成空指針異常,并且已經發布出去,手機上不調試,所以就只能把報錯信息保存到文件中,每次查看。

混淆以后,出現錯誤,每次看報錯信息,連方法都難找到。雖說有屬性對應的txt,但是有些混淆的方法名是一模一樣,所以找起來相當麻煩。

下面就把我遇見的問題分享出來吧。

第一個,類型轉換錯誤,因為我用的泛型,所以在調用某些方法的時候,會出現這種錯誤,后面在混淆配置文件加了一個過濾泛型的語句,如下。

-keepattributes Signature

過后,就沒有出現類似的類型轉換錯誤。

第二個,空指針異常,這個錯誤是我對比前面的錯誤來說,所用的時間比較短,開始是找不到方法到底是哪個(原因是上面提到的混淆后方法名相同),所以就把這個類里面的所有方法都過濾掉,這樣我沒用多少時間,也就找到了具體的方法,可還是不明白原因,后面發現了其中的一個if判斷,我利用反射篩選方法,關鍵字是“get”,突然我就震精了,大叫一聲——soga,原來我?model?set/get方法名全部都被混淆了,所以篩選不到方法,返回的也就是null值,自然下面用到這個方法的返回值就會拋出空指針異常。

解決方法:把?model包下面的所有類,全部過濾掉。

總結:如要用到反射,反射一般就會利用到泛型,所以必須要把泛型的全部過濾掉,如果有根據變量名或者方法名判斷的,記得所在的類需過濾掉,之中還有用到?annotation的地方,要加入一行代碼,如下:

-keepattributes *Annotation*

這樣就能過濾掉所有的annotation,否則也會拋出空指針異常。

Proguard官方都有說具體要過濾什么,所以還是要多看看官方的說明啊~

總結

以上是生活随笔為你收集整理的android开发Proguard混淆与反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。