Android Studio下ProGuard混同パッケージ

3871 ワード

前のノートProGuardの基礎文法とパッケージ構成に続いて、パッケージの混同に注意しなければならない点をまとめました.ここ数日、新しいプロジェクトのオンライン化に追われ、Android Studioに切り替えて開発した後、gradleのパッケージスクリプトを書く必要があります.新しいプロジェクトなので、混同プロファイルも書き直す必要があります.その結果、次の問題でパッケージを混同したときにlogを打つコードを削除する構成が成功しませんでした.前のノートでは、パッケージ化時に以下のような構成をすれば、プロジェクトのロゴを削除し、パッケージ化後の問題を避けることができると述べています.
-assumenosideeffects class android.util.Log{     public static int v(...);     public static int i(...);     public static int d(...);     public static int w(...);     public static int e(...); } -assumenosideeffects class java.io.PrintStream{     public void println(%);     public void println(**); }

その結果、カスタマイズされた混同ファイルの下で、長い間邪魔をしていたが、少しも効果がないことに気づき、憂鬱になった.ProGuardのこれらの処理は失効したのではないか.頭の中は大きな疑問符だらけで、Googleは長い間手がかりを見つけられず、いっそ置き去りにした.しかし、強迫症のプログラマーとして、数日後にまたこの問題を思い出して、暇があればいっそ研究して考えて、本当に問題の所在を見つけて、順調に解決しました.

問題はどこですか。


考えてみると、グーグルは長い間いなかったので、ProGuardの公式サイトに行って文法を見ても、上記の最適化方法を廃棄することには言及していませんでした.では、基本的には私自身の構成に問題があると断定できます.しかし、私は自分の構成をよくチェックして、異様ではないことを発見しました.ネット上で言及されたこのような最適化方式の失効は、ファイル構成を混同しているだけです.
  • -dontoptimize(その名の通りdon't optimizeは最適化されていない)
  • の時になってやっと失効したが、問題は私が自分のプロファイルにこれをつけていないことだ.ああああああ!ええ、頭が回転して、違います.gradleでパッケージしました.Android Studioはbuildを生成しました.gradleがファイルをパッケージ化するとき、デフォルトの混同ファイルproguard-androidを指定します.txt(SDKディレクトリ/tools/proguard/ディレクトリの下)もう一つは、混同ルールを自分で追加するproguard-rulesです.Proファイルは私たちがコードを書いたmoudleディレクトリの下にあります.
    buildTypes {     release {         minifyEnabled true         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'     } }

    そうすると、自分で書いたproguard-rules.Proの中は大丈夫です.基本的にはproguard-androidです.txtに問題があったので、いっそそのファイルを直接開いてみたら、案の定、次の2行の混同配置が見えました.
    -dontoptimize -dontpreverify

    これで自分がlogを除去したコードが失効した原因がわかります.ははは、元凶を見つけた後、直接この配置を外してokになり、鶏は凍えて急いで勝利の果実を再梱包した.結局半分に梱包して、お母さん、直接間違いを報告して終わりました.

    行きました-dontoptimizeはまだだめです


    ええと、久しぶりに原点に戻されたことに気づきました.No、まだ原点に達していないので、梱包もできません.他に何か変更する必要があるのではないでしょうか.その後、当日は何かいい方法が思いつかず、いっそ一日ぶりに帰ってきて邪魔をして、sdkが持っている配置混同ファイルのディレクトリの下に、3つの混同された配置ファイルがあります.
  • proguard-android.txt
  • proguard-android-optimize.txt
  • proguard-project.txt

  • 前のproguard-androidを開きます.txtは次のコメントを見ました
    -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file.

    ははは、今度は夢のように目が覚めましたね.ああああ、ああ.急いでgradleの中のシステム混同プロファイルをproguard-android-optimizeに変更します.txt、自分で書いた混同ファイルをかけて一緒に梱包して、しばらくしてから、やっと私のほしい混同バッグを出しました.

    まとめ


    よく見に行きましたtxtとproguard-android-optimize.txtの違いは、実は主な問題は以下の構成が少なくなったことです.
    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 5 -allowaccessmodification -dontpreverify # The remainder of this file is identical to the non-optimized version # of the Proguard configuration file (except that the other file has # flags to turn off optimization). -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose

    パッケージに最適化を追加するには、最適化レベルと最適化ポリシーアルゴリズムのいくつかの構成などを指定する必要があります.-dontoptimizeを行った後、これらを構成していないため、パッケージさえ打てません.
    また、instead you will need to point to the“proguard-android-optimize.txt”file instead of this one from your project.properties file.このヒントは実は古い開発ツールADTの下のヒントにすぎない.ADTの下で配置がprojectで混同されているからだ.properties指定.Android Studio開発に変えたら、build.gradleの構築スクリプトで構成すればいいのですが、以下のようになります.
    buildTypes {     release {         minifyEnabled true         proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'     } }

    くどくど言って、君と分かち合って、喜ばないで噴き出さないでください.のははは