- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我注意到在我最近创建的项目中,出现了一种新的混淆方法,即使用预构建的脚本:
${sdk.dir}/tools/proguard/proguard-android.txt
这没有优化,并带有注释:
Optimization is turned off by default. Dex does not like code run through the ProGuard optimize and preverify steps (and performs some of these optimizations on its own).
似乎遵循此建议意味着 assumenosideeffects
无效。例如,这些常见任务:
#Remove logging
-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(...);
}
#Remove asserts
-assumenosideeffects class junit.framework.Assert {
public static *** assert*(...);
}
证明它不起作用:
if (release)
{
Assert.assertTrue("Proguard config error, Asserts have been left in", false);
}
是否有一个安全的中间地带,我可以在其中应用优化来消除使用 assumenosideeffects
定义的调试,但又不会冒 Dex 和混淆器优化相关问题的风险?
最佳答案
我找到的解决方案是明确仅启用 assumenosideeffects
命令所依赖的优化。因此,混淆器配置示例如下:
# proguard-project.txt
# Remove all Verbose/Debug logging
-optimizations code/removal/simple,code/removal/advanced
-dontobfuscate
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int d(...);
}
请注意,project.properties 文件应指定 optimize SDK proguard 配置文件,因为单次调用 -dontoptimize
会禁用优化。
# project.properties
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
关于android - 什么优化是安全的,仍然允许 -assumenosideeffects 去除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999679/
我注意到在我最近创建的项目中,出现了一种新的混淆方法,即使用预构建的脚本: ${sdk.dir}/tools/proguard/proguard-android.txt 这没有优化,并带有注释: Op
我在我的应用程序中编写了 -assumenosideeffects class android.util.Log。但是如何使用它。 -assumenosideeffects class android
我是一名优秀的程序员,十分优秀!