android studio 混淆编译
来源:互联网 发布:java 创建线程 sleep 编辑:程序博客网 时间:2024/06/06 01:55
转自:http://blog.csdn.net/qq_33165955/article/details/72723737
首先准备工作在 build.gradle文件中把
buildTypes { release { minifyEnabled true }}
打开,然后打开proguard-rules.pro 文件 , 这个文件可以通过修改后缀名为txt ,打开修改编辑 ,然后在改过来 ,
也可以自己写一个这个文件当做通用的,然后直接覆盖新项目。然后就是里边要写的东西了:
1,首先把通用规则写上,在}后边开始写,记住#这个符号是注释,就是作废了这一行。添加如下:
-optimizationpasses 5 # 指定代码的压缩级别-dontusemixedcaseclassnames # 是否使用大小写混合-dontpreverify # 混淆时是否做预校验-verbose # 混淆时是否记录日志-ignorewarnings #抑制警告 这个不建议加 可以不用写-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法-keep public class * extends android.app.Activity # 保持哪些类不被混淆-keep public class * extends android.app.Application # 保持哪些类不被混淆-keep public class * extends android.app.Service # 保持哪些类不被混淆-keep public class * extends android.content.BroadcastReceiver # 保持哪些类不被混淆-keep public class * extends android.content.ContentProvider # 保持哪些类不被混淆-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆-keep public class * extends android.preference.Preference # 保持哪些类不被混淆-keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆 public void *(android.view.View);}-keepclassmembers enum * { # 保持枚举 enum 类不被混淆 public static **[] values(); public static ** valueOf(java.lang.String);}-keepclassmembers enum * { # 保持枚举 enum 类不被混淆 public static **[] values(); public static ** valueOf(java.lang.String);}-keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native <methods>;}#保持自定义控件类不被混淆-keepclasseswithmembers class * { public <init>(android.content.Context,android.util.AttributeSet); }-keepclasseswithmembers class * {# 保持自定义控件类不被混淆 public <init>(android.content.Context, android.util.AttributeSet, int);}-keep public class * extends android.view.View{ public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...);}这些是不区分项目名称的。大概从################不混淆R类##################-keep public class com.hxwl.wulinfeng.R$*{public static final int *;}
####################support.v4#####################-dontwarn android.support.**-keep public class * extends android.app.Activity 这样类似的句子可以看出来规则,下面我不想混淆我继承
Application的所有类,我写下了:-keep public class * extends android.app.Application # 保持哪些类不被混淆继承 application的类这只是举个例子;
2,然后我们区分包名进行混淆(也就是你们的和我的包名不一样,但是需要去混淆的类)(这里包名我就用@@来代替
)
首先是bean类不能被混淆 这里我的包名就是最后一层是bean、db、view
###################通用############## -keep class com.@@.@@.bean.**{*;}##bean不混淆 -keep class com.@@.@@.db.**{*;}##db不混淆 -keep class com.@@.@@.view.**{*;}##自定义控件。
。
3,然后我们看看我们导进来的包吧
------ 就用Gson举例子
-keep class com.google.gson.** {*;}#-keep class com.google.**{*;}-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }-keep class com.google.gson.examples.android.model.** { *; }-keep class com.google.** { <fields>; <methods>;}-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}-dontwarn com.google.gson.**怎么知道那个com什么的后边怎么写?你能找到这个包吗
看到了吗?这样,还有的我们直接在AS中com进去的jar ,在Libs里边是找不到的
找到了吗?这样怎么写?
##注解jar-keep class com.jakewharton.** { *; }-dontwarn butterknife.internal.**这样就ok了。 保持 class 。。。。就是 keep class com.@.@.@**{*;} 后边就是里边全部的类文件等,如果不太懂就照着写就ok;这里我举几个例子:##okhttp-dontwarn com.squareup.okhttp.**-keep class com.squareup.okhttp3.** { *; }-keep class com.squareup.okio.** { *; }-dontwarn okio.**### greenDAO 3-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABLENAME;}-keep class **$Properties# If you do not use SQLCipher:-dontwarn org.greenrobot.greendao.database.**# If you do not use RxJava:-dontwarn rx.**4,最后还有我们引入的外部工程怎么办?有的没有混淆 有的已经经过混淆了再次混淆会出现问题,直接不去做混淆:同样的找到那个引入的工程看一下他们的包名就可以了:-keep class @@.@@.@@.**{*;}
阅读全文
0 0
- android studio 混淆编译
- android studio 混淆编译注意
- Android studio打包混淆编译的时候出现异常:transformClassesAndResourcesWithProguardForRelease
- Android Studio 混淆打包
- android studio 代码混淆
- android studio混淆打包
- Android studio 混淆代码
- Android studio 混淆问题
- android studio 代码混淆
- Android studio 打包、混淆
- android studio 混淆
- android studio 代码混淆
- Android Studio 代码混淆
- android Studio 混淆
- android studio 代码混淆
- Android Studio混淆相关
- Android Studio 代码混淆
- android studio混淆打包
- git
- openVswitch 在centos下安装
- MDK软件不能模拟仿真STM32一些芯片的问题解决方法
- 在Maven仓库中添加Oracle JDBC驱动(11g)
- 正向代理与反向代理
- android studio 混淆编译
- JS中变量的声明与变量命名规范
- python爬取网页图片
- 21、vue.js 之vuex安装及使用
- USB2.0速度识别
- 基本数据类型,String、Integer等封装类,以及Class,三者在内存中是怎么存储的?对它们的操作机制又是什么样的?
- powerpoint(ppt) 的制作
- 关于Sringmvc开发 api 与 app 数据传输特殊字符(如%)转义问题
- JavaScrip数组去重(进阶版- 包含NaN,undefined,null)