2017-03-16 8 views
4

私はProGuard for Androidビルドの使用についての理解を深めようとしています。何を保持するべきか(難読化されていないか)正確に、何を難読化するべきかについてはあまりよく分かりません。ライブラリのProGuard - Androidで正しく使用するには?どのクラスとライブラリを保持するのですか?

カップルは私のアプリで使用されている、そのうちのいくつかは

com.android.support:appcompat 
com.android.support:design 
io.reactivex:rxandroid 
io.reactivex:rxjava 
com.jakewharton.rxbinding 
com.trello:rxlifecycle 

の下にリストされています。質問1:私は、ライブラリの上

を難読化すべきか?彼らはすでにオープンソース..ですProGuardのルールを使用して、すべてのサポートライブラリを維持するのが賢明ではありません。

keep class android.support.** { *; }

私はio.reactivexとjakewhartonライブラリ

質問2で行うことができ、同様の方法

サポートと外部ライブラリ以外では、このアプリケーション用にコード化されたアプリケーション固有のクラスがあります。 AndroidManifest.xmlに記載されているクラス名、具体的にはパブリックメンバーを保持して、残りのコードを難読化するようにしても構いません。

私が何かを見逃しているか、私の理解が正しくないかどうか教えてください。これを繰り返すことは、技術的にどうやって行うのかという問題ではなく、難読化/最適化/縮小のために何を含めるべきか、さらには除外するべきか、さらに具体的にはその理由です。ビルド。

答えて

2

質問1:上記のライブラリを難読化する必要がありますか?

はい。 -keep <library>のルールを追加すると、ライブラリ全体がAPKに組み込まれます。これによってAPKが膨らみ、アプリが64kのメソッド制限を超えてMultidexが必要になるなどの問題が発生する可能性があります。ライブラリが提供するProGuardルールを適用することは常に良い考えです。通常、ライブラリのソースコードやhttps://github.com/krschultz/android-proguard-snippetsなどのウェブサイトには.pro個のファイルがあります。

質問2:AndroidManifest.xmlに記載されているクラス名、具体的にはパブリックメンバーを保持して、残りのコードを難読化するようにしても構いません。

Androidプラグインはすでにあなたのためにそれを行います。プラグインは名前を保存する必要のあるすべてのクラス(アクティビティ、サービス、ブロードキャスト受信者、ビューなど)をスキャンし、それらを難読化しません。これには、AndroidManifest.xmlで宣言したすべてが含まれます。

+0

私はProGuardの縮小オプションを見落としていました... ProGuard設定の関連サイトを参照できるということに同意しますが、Google特定ライブラリについてはどうですか。 com.android.support:appcompatこれらの設定を見つけることができる場所アプリケーション固有コードの質問2の回答について...私たちは自分のコードに対して設定を提供すべきではありませんか?この場合、..アプリケーション固有のコード.. AndroidManifestで言及されているものは、常に逆コンパイル用に開いています.. – Girish

+0

いくつかのライブラリ 'com.android.support:appcompat'は、Android Pluginが指定したデフォルトの設定としてProGuardで動作するための明示的なルールを必要としません。 'rxjava')は明示的な規則を必要とするかもしれません。ケースごとに異なるため、各ライブラリのドキュメントでProGuardルールに関するセクションを確認することをお勧めします。 –

+0

「自分のコード」に関して、Androidプラグインのデフォルト設定では、アプリに適用される多くのルールが既に指定されています。 "minify"を有効にすることで、ProGuardはすでに難解なものになるでしょう。しかし、あなたはAndroidManifestについて正しいです。特定のクラス/メソッド/フィールドを難読化することはできません(例えば、 'Activity.onCreate(Bundle)'は外部から呼び出されるため常に呼び出されます)できるだけコードをあなたの活動/断片/ビューから分離したヘルパーオブジェクトに変換し、ProGuardにそれらを難読化させてください:) –

関連する問題