最新のAndroid SDK(4.1)を使用しています。Proguardを有効にして署名入りのjarをエクスポートしようとしました。しかし、最適化されたAPKを逆コンパイルした後、私は、インライン化されると予想されるメソッドが存在しないことに気付きました。Android Proguardがインラインでない
コードが正しく難読化されたため、Proguardが実行されたことがわかりました。これを確認するので、私は私の活動に、このメソッドを追加しました:このプライベートメソッドは、私の活動に一度だけ呼び出され
private void testInlining()
{
mConfig = null;
}
、それはプライベートなので、それが唯一と呼ばれるオプティマイザに非常に明白でなければなりませんかつてそれはインライン化されるべきだということです。
ドキュメントでは、デフォルトですべての最適化が有効になっており、Proguardの「インラインメソッドは短いか、一度だけ呼び出される」と記載されています。
インライン化を有効にするためにProguardに与えなければならない特定のフラグはありますか?
EDIT
マイProGuardの設定ファイルは
を使用した後-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
EDIT
が含まれています
私はメソッドがインライン化されていない理由を取得:
[proguard] com.templatecompany.templateappname.EntryPointActivity: void testInlining() (20:21)
[proguard] is invoked by com.templatecompany.templateappname.EntryPointActivity: com.td.media.ivConnection.IvConfig getIvConfig() (14:15)
[proguard] implements com.td.widget.MainActivity: com.td.media.ivConnection.IvConfig getIvConfig()
[proguard] is invoked by com.td.widget.MainActivity: void onCreate(android.os.Bundle) (140:175)
[proguard] implements android.app.Activity: void onCreate(android.os.Bundle)
[proguard] is a library method.
をしかし、私はこの方法testInlining
が今度は別の方法で使用されている方法getIvConfig
で使用されていることをどのように実際に見て確認していませんtestInlining
のインライン展開をgetIvConfig
に防止します。
-dontoptimize
代替最適化設定はわずか数の最適化を無効にします
、以下を参照してください
これを試しましたか? -optimizationpasses http://stackoverflow.com/questions/5068251/android-what-are-the-recommended-configurations-for-proguard?rq=1 – user1154664
の5 もっとあなたが実際にProGuardのを得ることができました任意のメソッド呼び出しをインラインにするには? proguard-android-optimize.txtを使って、intを返す単純なプライベートメソッドを書くと、私はそれが動作するのを見ることができませんでした:http://paste.ofcode.org/hbpzPe4EdAnDGnNqNTE7c3 – brAzzi64