我注意到,在最近创建的项目中,有一种新的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优化相关的风险的风险? 最佳答案
我发现的解决方案是显式地仅启用assumenosideeffects
命令所依赖的优化。因此,示例proguard配置如下:
# proguard-project.txt
# Remove all Verbose/Debug logging
-optimizations code/removal/simple,code/removal/advanced
-dontobfuscate
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int d(...);
}
请注意,project.properties文件应指定优化 SDK proguard配置文件,因为单次调用
-dontoptimize
会禁用优化。# project.properties
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
关于android - 哪种安全是最安全的,但仍然允许-assumenosideeffects删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16999679/