Androidstudio 混淆去掉日志 assumenosideeffects 不起作用
来源:互联网 发布:中越战争 知乎 编辑:程序博客网 时间:2024/06/16 17:54
1.gradle
主要看 buildTypes
apply plugin: 'com.android.application'android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.dxiang.demoproguard" minSdkVersion 16 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true //混淆-- minifyEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//默认不优化 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'//optimize 默认优化就是这两个区别//// //签名// signingConfig signingConfigs.release } release { //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true //混淆-- minifyEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'//// //签名// signingConfig signingConfigs.release } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12'}
2。proguard-rules.pro文件
-keepclassmembers class * extends android.support.v7.app.AppCompatActivity { public void *(android.view.View); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -dontwarn android.support.** -keepclassmembers class **.R$* { public static <fields>; }-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 java.io.PrintStream { public *** println(...); public *** print(...);}
注释:
1.去掉log日志: -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(...);
}
2.去掉System.out.println 和System.out.print输出: -assumenosideeffects class java.io.PrintStream {
public *** println(...);
public *** print(...);
}
3.assumenosideeffects :assume no side effects:无副作用的东西
3.assumenosideeffects 不起作用注意点:
1. 在gradle中使用的文件错误:
1) //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件;
//这两个文件是合并关系;
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//默认不优化
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'//optimize 默认优化就是这两个区别
本文使用的是proguard-android-optimize.tx这个文件,不是Android Studio默认使用的proguard-android.txt
2) proguard-android.txt 和proguard-android-optimize.txt的区别:
(1).proguard-android.txt 默认不优化,而proguard-android-optimize.txt是优化的;
3)一定要注意-dontoptimize,配置。
(1)don‘t optimize 不要优化 将会关闭优化,导致日志语句不会被优化掉,所以不能有这个配置;
(2)如果有“-dontoptimize”这句话 一定要将其注释掉;
(3) “2)” 的却别,就在于proguard-android.txt配置了这句话“-dontoptimize”,而"proguard-android-optimize.txt"没有使用
4.测试
源码1)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity", "log" ); } }
通过生成的apk反编译出如下代码1-1)
public class MainActivity extends Activity { protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130903040); } }
运行LogCat中没有输出日志。
很明显Log.e("MainActivity","log"
源码2)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity", "log " + test()); } private String test(){ Toast.makeText(this, "test", Toast.LENGTH_SHORT).show(); return "jjyy"; } }
通过生成的apk反编译出如下代码2-1)
public class MainActivity extends Activity { protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130903040); //如下是test()函数的代码 StringBuilder localStringBuilder = new StringBuilder("log "); Toast.makeText(this, "test", 0).show(); localStringBuilder.append("jjyy").toString(); } }
运行LogCat中没有输出日志。但是弹出toast。
很明显Log.e();被优化掉了,但是test()方法依然被保留了,
源码3):
public class MainActivity extends Activity { int i = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity", "log" + test() ); Toast.makeText(this, "i = " + i, Toast.LENGTH_SHORT).show(); //i == 1; } private String test(){ i++; return "test" + i; } }
通过生成的apk反编译出如下代码3-1)
public class MainActivity extends Activity { private int a = 0; //proguard将代码混淆后变量i变为了a protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130903040); //Log.e()代码被删除了,但是调用test()函数里的i++被直接优化到这里 StringBuilder localStringBuilder = new StringBuilder("log"); this.a = (1 + this.a); localStringBuilder.append("test" + this.a).toString(); Toast.makeText(this, "i = " + this.a, 0).show(); } }
运行LogCat中没有输出日志。但是弹出toast 显示字符串 : "i = 1"
很明显Log.e();被优化掉了,但是test()方法依然被保留了,
- Androidstudio 混淆去掉日志 assumenosideeffects 不起作用
- android混淆去掉日志
- AndroidStudio混淆
- AndroidStudio Gradle项目混淆
- AndroidStudio代码混淆
- AndroidStudio 混淆打包
- Androidstudio下代码混淆
- androidStudio代码混淆插件
- AndroidStudio 混淆打包
- (转)AndroidStudio 混淆打包
- AndroidStudio 混淆打包
- AndroidStudio 混淆打包
- AndroidStudio中代码混淆
- AndroidStudio 混淆打包
- AndroidStudio 基本混淆配置
- AndroidStudio通用混淆配置文件
- androidstudio 去掉标题
- androidstudio去掉更新提示
- Mysql执行DDL语句错误-Incorrect key file for table
- 结构体字节对齐
- c#使用pop3服务器进行邮箱验证
- CUDA计算能力的含义
- Nginx为什么比Apache Httpd高效:原理篇
- Androidstudio 混淆去掉日志 assumenosideeffects 不起作用
- VS_online使用小结
- Spring整合Mybaits实现ehcache 注解查询缓存
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- 浅析Java中的final关键字
- 编程语言的合适性
- android fragment和activity的区别
- FLASH和EEPROM的最大区别
- 用不可逆算法MD5进行加密后,如何进行登录验证