我注意到,在最近创建的项目中,有一种新的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/

10-12 04:55