Android Jack 编译器没有从 proguard 规则中删除日志

Posted

技术标签:

【中文标题】Android Jack 编译器没有从 proguard 规则中删除日志【英文标题】:Android Jack Compiler not removing logs from proguard rules 【发布时间】:2016-10-22 06:36:29 【问题描述】:

我尝试过使用:

-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(...);

在 Proguard 中删除日志,如果我不使用新的 Jack 编译器,它会很好用

defaultConfig 
    ...
     jackOptions 
         enabled true
     

compileOptions 
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8

当我编译 apk 时,我注意到所有日志在生产版本中都处于活动状态。是否有错误、错误或“-assumenosideeffects”尚不支持?

我可以在最终 apk 中从日志中删除字符串吗?

【问题讨论】:

【参考方案1】:

使用 Jack 编译器工具链时,不会使用 ProGuard。相反,Jack 将使用自己的工具来应用指定的规则。

并非所有 ProGuard 规则都受支持(请参阅支持的 directives):-assumenosideeffects受支持。

注意:DexGuard,ProGuard 的商业版本支持 ProGuard 的所有指令,并且可以与 Jack 结合使用,从 7.2 版本开始,将在 1-2 周内发布。

【讨论】:

是的,但是如果您查看source.android.com/source/jack.html,您会看到 -assumenosideeffects 列在“忽略的选项”中,但不起作用,或者尚未实施。 Jack 在遇到这样的规则时不会抛出错误,但它不会对它做任何事情,这就是我不支持的意思。 那么 Jack 会导致生产 APK 中的安全漏洞?

以上是关于Android Jack 编译器没有从 proguard 规则中删除日志的主要内容,如果未能解决你的问题,请参考以下文章

Android:JACK编译错误汇总及解决

Android 系统编译不过了报错Try jack-diagnose,SSL error when connecting to the Jack server

如何在 android studio 中添加 *.jack?

JACK报错处理&多用户编译

解决:编译CM14.1 提示Jack “Out of memory error”错误

连接到 Jack 服务器时出现错误“SSL 错误”重建 android 代码。尝试“千斤顶诊断”