如何在 Android 应用程序的发布版本中删除 Log.d() 调用?
How to remove Log.d() calls in release build of an Android app?
我注意到我的发布版本是在 eclipse 中通过以下方式创建的:
Android Tools -> Export signed application package ...
我的混淆器-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() 消息不应该在那里。
还有什么我应该设置的吗?
我花了很多时间在谷歌上搜索,但没有关于该主题的明确说明。好吧,我发现的大多数事情都是有类似问题但没有解决方案的人。
你试过吗?
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}
在我的应用程序中,我用自己的 class 包装了记录器调用,它在记录之前检查布尔值 "debugMode"。
这样,将布尔标志更改为 false,就会导致没有日志(实际上,这只是概念,因为我也想允许不同级别的日志记录,但想法是一样的)。
您可以根据需要配置每个级别,因此您仍然会看到严重的日志,但排除调试日志。
确保您的混淆器配置中没有 -dontoptimize
。 proguard 优化器删除了具有 "no side effects".
的方法调用
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 编译器认为条件在发布配置中永远不会为真,因此不会在条件块内发出字节码。
我注意到我的发布版本是在 eclipse 中通过以下方式创建的:
Android Tools -> Export signed application package ...
我的混淆器-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() 消息不应该在那里。 还有什么我应该设置的吗? 我花了很多时间在谷歌上搜索,但没有关于该主题的明确说明。好吧,我发现的大多数事情都是有类似问题但没有解决方案的人。
你试过吗?
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}
在我的应用程序中,我用自己的 class 包装了记录器调用,它在记录之前检查布尔值 "debugMode"。 这样,将布尔标志更改为 false,就会导致没有日志(实际上,这只是概念,因为我也想允许不同级别的日志记录,但想法是一样的)。 您可以根据需要配置每个级别,因此您仍然会看到严重的日志,但排除调试日志。
确保您的混淆器配置中没有 -dontoptimize
。 proguard 优化器删除了具有 "no side effects".
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 编译器认为条件在发布配置中永远不会为真,因此不会在条件块内发出字节码。