我注意到在我最近创建的项目中,出现了一种新的 proguard 方法,即使用预构建的脚本:
${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 和 proguard 优化相关的问题的风险?