私は最新の Android SDK (4.1) を使用しており、Proguard を有効にして署名済みの jar をエクスポートしようとしました。しかし、最適化された APK を逆コンパイルした後、インライン化されると予想していたメソッドがインライン化されていないことに気付きました。
コードが正しく難読化されたため、Proguard が実行されたことはわかっています。これを確認するために、このメソッドをアクティビティに追加しました。
private void testInlining()
{
mConfig = null;
}
このプライベート メソッドは、私のアクティビティで 1 回だけ呼び出されます。これはプライベートであるため、オプティマイザには、1 回だけ呼び出され、インライン化する必要があることは明らかです。
ドキュメントには、すべての最適化がデフォルトで有効になっており、Proguard の「短い、または 1 回だけ呼び出されるインライン メソッド」と記載されています。
インライン化を有効にするために Proguard に指定する必要がある特定のフラグはありますか?
編集
私のproguard構成ファイルには含まれています
-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
編集
使用後
-whyareyoukeeping class com.templatecompany.templateappname.EntryPointActivity {*;}
メソッドがインライン化されていない理由は次のとおりです。
[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
しかし、メソッドが別のメソッドで使用されるメソッドで使用されているという事実が、 in でgetIvConfig
のインライン化をどのように防ぐかはわかりません。testInlining
getIvConfig