【发布时间】:2011-08-25 22:18:26
【问题描述】:
我在发布 Android 应用程序时包含 this ProGuard configuration 以去除调试日志语句:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
这按预期工作 - 我可以从 ProGuard 日志和 Android 日志输出中看到,诸如 Log.d("This is a debug statement"); 之类的调用已被删除。
但是,如果我在这个阶段反编译应用程序,我仍然可以看到所有使用过的 String 字面量——即本例中的 This is a debug statement。
有没有办法同时从字节码中删除不再需要的每个 String?
【问题讨论】:
-
这是否与
-dontoptimize一起工作,因为 Android 文档说 “添加优化会带来一定的风险,例如,并非所有由 ProGuard 执行的优化都适用于所有版本的 Dalvik。” -
@codingcrow 可能不会,因为据我所知,这是一种优化。但我相信默认的 Android ProGuard 配置通常启用了优化,但禁用了一些他们认为无法可靠运行的特定优化。所以你应该可以毫无问题地将它添加到默认配置中。
-
如果您查看 project.properties,您会发现
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt行,在 progaurd-android.txt 中您会发现 默认情况下优化是关闭的。 Dex 不喜欢代码运行 # 通过 ProGuard 优化和预验证步骤。所以这是一个 catch-22 的情况。 -
好的,所以它不是默认值。但是您可以改用捆绑的
proguard-android-optimize.txt配置。