Android Proguard选项-更严格的规则;删除日志语句
我通过取消对project.properties中的行的注释来启用proguard 我反编译了我的APK以检查它是否有效。我可以看到,我所有的方法、变量名和类名都已更改为a、b、c。。等等,这是好的。但是,我的活动类尚未重命名。此外,Log.d语句也没有按预期删除Android Proguard选项-更严格的规则;删除日志语句,android,obfuscation,proguard,Android,Obfuscation,Proguard,我通过取消对project.properties中的行的注释来启用proguard 我反编译了我的APK以检查它是否有效。我可以看到,我所有的方法、变量名和类名都已更改为a、b、c。。等等,这是好的。但是,我的活动类尚未重命名。此外,Log.d语句也没有按预期删除 我如何使某人更难阅读反编译代码并删除日志语句?为了删除对日志语句的所有引用,您应该在proguard配置文件中添加以下行: -assumenosideeffects class android.util.Log { publi
我如何使某人更难阅读反编译代码并删除日志语句?为了删除对日志语句的所有引用,您应该在proguard配置文件中添加以下行:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
您可以通过示例找到完整的手册。为了删除日志,我用各种技术写了一篇文章,其中一些来自StackOverflow(文章中说作者是谁),您可以在这里看到: 我觉得第二个带Proguard的是最好的
要混淆代码,您需要考虑您的需要,请参阅中的更多示例:与Android应用程序生命周期相关的各种方法无法重命名,因为:
- 继承;超类方法包含在Android库中,不能通过Proguard重命名。因此,将
重命名为onCreate()
将由于a()
注释而导致编译问题@Override
- 在活动的生命周期中,Android会执行各种功能,这些功能应该具有特定的名称(例如
和onCreate()
)。如果您的onResume()
被重命名为onCreate()
,则只执行超类实现,而不是您的实现a()
- 这将假定对清单进行修改,Proguard根本不支持这一点
- 自动进行这些修改可能会产生不必要的影响。例如,如果以前被混淆为
的类现在可能被混淆为a
,则来自用户主屏幕的快捷方式可能不再有效B
Paul Lammertsma对你问题的第一部分给出了准确的答案。阐述第二部分: 只有在未禁用优化时才能删除日志记录,这需要在
项目中指定不同的全局配置文件。属性
:
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
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(...);
}
有多种具有更多或更少通配符的等价形式
类似的问题和答案:
-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(...);
}