我注意到我的发布版本,我在eclipse中通过:
创建Android工具 - >导出已签名的应用程序包...
我的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()消息都不应该存在。 还有别的东西我应该设置吗? 我花了很多时间在谷歌搜索,但没有关于该主题的明确指示。我找到的大多数事情都是有类似问题但没有解决方案的人。
答案 0 :(得分:16)
确保您的proguard配置中没有-dontoptimize
。它是一个proguard优化器,用于删除没有副作用的方法调用"。
SDK默认proguard-android.txt
中包含-dontoptimize
。请改用proguard-android-optimize.txt
,而不是在项目特定的proguard配置中添加-dontoptimize
。
请您说明我可以阅读有关该主题的内容。如果它当然存在。
对于初学者-assumenosideeffects
列在documentation的优化选项下。
还有一件事是,我已经读过使用proguard-android-optimize.txt会导致某些设备出现问题。所以,这是一种类型的捕获22情况。
Proguard一般会有副作用。您需要彻底测试您的proguard处理的应用程序。
如果您想在不使用proguard的情况下从发布版本中删除日志记录,您可以例如添加
if (BuildConfig.DEBUG)
在每次日志记录调用之前,BuildConfig
是Gradle Android插件生成的构建配置。由于DEBUG
存在编译时常量,因此Java编译器认为条件在发布配置中永远不会为真,并且不会在条件块内发出字节码。
答案 1 :(得分:3)
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}
答案 2 :(得分:0)
在我的应用程序中,我使用自己的类包装了记录器调用,该类在记录之前检查Boolean-“debugMode”。 这样,将布尔标志更改为false,导致没有日志(实际上,这只是概念,因为我想允许不同级别的日志记录,但这个想法是相同的)。 您可以根据需要配置每个级别,因此您仍然可以看到严重的日志,但不包括调试日志。