Android Jack编译器未从Proguard规则中删除日志

3

我尝试使用以下方法:

-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个回答

1
当使用Jack编译器工具链时,将不使用ProGuard。相反,Jack将使用自己的工具应用指定的规则。
并非所有的ProGuard规则都被支持(请参见支持的指令):-assumenosideeffects不被支持。
注意:DexGuard,即ProGuard的商业版本,支持来自ProGuard的所有指令,并且可以与Jack结合使用,从版本7.2开始,在1-2周内发布。

是的,但如果您查看https://source.android.com/source/jack.html,您会发现“-assumenosideeffects”列在“已忽略选项”中,但尚未生效或未实现。 - Antonio
当遇到这样的规则时,Jack不会抛出错误,但它也不会对其进行任何处理,这就是我所说的“不支持”。 - T. Neidhart
那么 Jack 在生产 APK 中引起了安全漏洞? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接