gpt4 book ai didi

android - 如何在 Android 应用程序的发布版本中删除 Log.d() 调用?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:13 24 4
gpt4 key购买 nike

我注意到我的发布版本是在 eclipse 中通过以下方式创建的:

Android Tools -> Export signed application package ...

我的 proguard-project.txt 包含:

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

但是,如果我在设备上运行该应用程序并使用 CatLog 查看日志,我会看到所有不应该存在的 Log.d()、Log.v() 消息。还有什么我应该设置的吗?我花了很多时间在谷歌上搜索,但没有关于该主题的明确说明。好吧,我发现的大多数事情都是有类似问题但没有解决方案的人。

最佳答案

确保你的 proguard 配置中没有 -dontoptimize。 proguard 优化器移除了“无副作用”的方法调用。

SDK默认的proguard-android.txt里面有-dontoptimize。请改用 proguard-android-optimize.txt,不要在项目特定的混淆器配置中添加 -dontoptimize

Could you please state some source where I could read up on the subject. If it exists of course.

好吧,对于初学者来说,-assumenosideeffects 列在 documentation 的优化选项下。 .

One more thing bothers is that, I have read that using proguard-android-optimize.txt can cause problems on some devices. So, it is a sort od catch 22 situation.

Proguard 通常会有副作用。您需要彻底测试您的 proguard 处理的应用程序。


如果你想在不使用混淆器的情况下从发布版本中删除日志记录,你可以例如添加

if (BuildConfig.DEBUG)

在每个日志记录调用之前,其中 BuildConfig 是由 Gradle Android 插件生成的构建配置。由于 DEBUG 有一个编译时常量,Java 编译器认为条件在发布配置上永远不会为真,因此不会在条件 block 内发出字节码。

关于android - 如何在 Android 应用程序的发布版本中删除 Log.d() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com