2013-10-04 2 views
7

説明できないProguardの動作があります。なぜProguardがAndroidManifest.xmlを処理するのですか

AFAIKプロガードはアンドロイドマニフェストには注意しません。また、私のproguard.cfgには、BroadcastReceiver関連のクラスについての言及はありません。だから私はそれらを取り除くべきだと思う。

# view AndroidManifest.xml #generated:784 
-keep class com.fiksu.asotracking.InstallTracking { <init>(...); } 

とそのクラス(BroadcastReceiverのdescendand)取り除かれません。

は、しかし、私はビン/ proguard.txtで奇妙な何かを参照してください。その理由は私には意味のある何かを言っていない:

[proguard] com.fiksu.asotracking.InstallTracking 
[proguard] is kept by a directive in the configuration. 

クラスがマニフェストに記載されていない場合、それは取り除かれます。

なぜか分かりますか?

+0

'/tools/proguard/proguard-android.txt'を確認しましたか?これには通常、Proguardがアプリケーションを完全に殺すのを防ぐ宣言が含まれています。 – Jens

+0

ええ、私の理解には、BroadcastReceiversやマニフェストに関連するものは何も含まれていないか、間違って解釈されています。 – lstipakov

+0

sdkの定義には、通常、受信者がマングルされないようにする '-keep public class * extends android.content.BroadcastReceiver'が含まれています。 – Jens

答えて

9

AndroidManifest.xmlと他のxmlファイルに基づいて、構成ファイルbin/proguard.txtを自動的に作成するために、ビルドプロセスでツールaaptが実行されます。ビルドプロセスは、設定ファイルをProGuardに渡します。だからProGuard自体は実際にはAndroidManifest.xmlを考慮しないが、aapt + ProGuardはそうする。

+0

ありがとう、エリック!また、ブロードキャストレシーバやサービスなどのために "keep"ディレクティブを手動で追加する必要がないことも意味しますか? – lstipakov

+0

@Stipaそれは正しいです。 SDK内のデフォルト設定はすべての一般設定を提供する必要があり、aaptはアプリケーション固有の設定をすべて作成する必要があります(アプリケーション固有の反映を除く)。 –

関連する問題