android - 什么优化是安全的,仍然允许 -assumenosideeffects 去除

标签 android proguard

我注意到在我最近创建的项目中,出现了一种新的混淆方法,即使用预构建的脚本:

${sdk.dir}/tools/proguard/proguard-android.txt

这没有优化,并带有注释:

Optimization is turned off by default. Dex does not like code run through the ProGuard optimize and preverify steps (and performs some of these optimizations on its own).

似乎遵循此建议意味着 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 和混淆器优化相关问题的风险?

最佳答案

我找到的解决方案是明确仅启用 assumenosideeffects 命令所依赖的优化。因此,混淆器配置示例如下:

# 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 文件应指定 optimize 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/

相关文章:

java - Gradle同步失败: Cause: startup failed:

java - GoogleApiClient 无法在 android studio 中连接

android - Proguard 警告 : com. example.android.PaymentGateway : can't find referenced field 'int container_pg' in class com. example.android.R$id

scala - 如何使用 Proguard 和 SBT 混淆 Fat Scala Jar

Android:如何使用 CursorAdapter?

java - 如何在 Java 服务器中重新创建由 Android 压缩的 JPEG 文件

android - ProGuard 不会混淆对象的方法

android - 混淆文件夹结构 - Android

java - CAVAJ java反编译器查看所有被CodeGuard混淆的代码

java - 我如何同时进行 2 个 Activity