私が最近作成したプロジェクトでは、ビルド済みのスクリプトを使用するプロガードへの新しいアプローチがあることに気付きました。
${sdk.dir}/tools/proguard/proguard-android.txt
これは最適化されておらず、コメントが付いています。
最適化はデフォルトでオフになっています。Dex は、ProGuard の最適化および事前検証の手順を実行するコードを好みません (また、これらの最適化の一部を単独で実行します)。
このアドバイスに従うことassumenosideeffects
は、効果がないことを意味するようです。たとえば、次の一般的なタスク:
#Remove logging
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
#Remove asserts
-assumenosideeffects class junit.framework.Assert {
public static *** assert*(...);
}
機能していないことの証明:
if (release)
{
Assert.assertTrue("Proguard config error, Asserts have been left in", false);
}
で定義されているように最適化を適用してデバッグを削除できますassumenosideeffects
が、Dex とプロガードの最適化に関連する問題を危険にさらすことなく、安全な妥協点はありますか?