android開発Proggaard混淆と反射

1217 ワード

http://charles-tanchao.diandian.com/post/2012-05-24/20118715
前のデータ操作クラスを開発したので、反射を利用してBaseDaoを封入しました.もともとは普通の時にデバッグに問題がありませんでしたが、使うまでになりました. Proggerdが混同した後に、各種の誤りが現れて、最初はタイプの転換の誤りで、後になって空の指針の異常になって、しかもすでに発表して、携帯電話の上で調整しないで、だから間違いを報告する情報をファイルの中に保存することしかできなくて、毎回調べます.
混淆後、エラーが発生しました.毎回誤報を読むと、方法さえ見つけられません.属性対応のtxtがありますが、紛らわしい名前が同じなので、探すのが面倒くさいです.
次に私が出会った問題を分けましょう.
最初に、タイプの変換が間違っています.私が使っている汎型のため、いくつかの方法を呼び出した時に、このようなエラーが発生します.後に混同構成ファイルにフィルタ汎型の語句を追加しました.以下のように.
-keepattributes Signature
後に同じタイプの変換エラーが発生しませんでした.
第二に、空の針は異常です.この間違いは前のミスと比べて、使った時間が短いので、最初は方法が見つからないです.(原因は上に述べた混淆後の方法名が同じです.).だから、この種類の中のあらゆる方法を全部フィルタします.時間があまりかからないので、具体的な方法を見つけましたが、原因はまだ分かりません.後にその中の一つのif判断を見つけました.私は反射フィルタの方法を利用して、キーワードは「get」です.突然に私はショックを受けました.「soga」と叫びました. モデルの set/getメソッド名は全部混淆されていますので、選別方法がないです.戻りはnull値です.自然にこの方法の戻り値を使うと、空の指針が異常になります.
解決方法:はい モデルバッグの下にあるすべての種類を全部フィルタします.
まとめ:反射を使うなら、反射は一般的に汎型に利用されますので、汎型のすべてを濾過しなければなりません.変数名や方法名によって判断されるものがあれば、覚えている種類はフィルタリングしなければなりません.中には効果があります. annotationのところは、行のコードを入れます.以下の通りです.
-keepattributes *Annotation*
このようにすべてのアンノテーションを濾過することができます.さもなければ、空の針が異常に出ます.
プログラードの公式サイトでは具体的に何を濾過するかという話がありますので、公式の説明をよく見てください.