android studio 混淆编译注意

标签: android studio
5人阅读 评论(0) 收藏 举报
分类:

首先准备工作在 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,最后还有我们引入的外部工程怎么办?有的没有混淆 有的已经经过混淆了再次混淆会出现问题,
直接不去做混淆:
同样的找到那个引入的工程看一下他们的包名就可以了:
-ke                                                    
				----自己对混淆的理解,不喜勿喷欢迎讨论

查看评论

Android混淆编译

一、概述:android发布签名包之前,混淆编译是必须的。由于我的sdk版本较高,因此新建android项目下有proguard-project.txt和project.properties这两个文件...
  • liduolp
  • liduolp
  • 2015-09-21 13:49:26
  • 878

Android stuido 导入项目注意事项

Android studio 导入项目(import project)时,由于一些插件版本和项目版本不一致,以至于导入项目时存在更新插件版本延时问题。现在说说解决方案。 1,更新 android sd...
  • xianwenzhang
  • xianwenzhang
  • 2016-02-24 13:55:51
  • 502

android studio 混淆编译

转自: http://blog.csdn.net/qq_33165955/article/details/72723737 首先准备工作在 build.gradle文件中把 buildTyp...
  • Wshiduo
  • Wshiduo
  • 2017-05-25 15:56:33
  • 254

android studio 导入新项目注意事项

android studio 注意事项
  • guyuegongsui
  • guyuegongsui
  • 2017-02-16 23:01:42
  • 688

关于Androidstudio的安装以及配置时候的注意事项

这篇文章只是我随意写的,以前我也用过androidstudio只是碰到问题一遍又一遍老忘,在我碰到问题的时候我就写一下以后如果碰到一样的免得忘了,所以如果乱的话也别在意了,这毕竟不是专业的。 andr...
  • u014423172
  • u014423172
  • 2016-06-18 22:49:08
  • 2228

Android源码混淆编译app

在源码中编译app,除了需要zhun
  • konan1027
  • konan1027
  • 2014-08-02 15:16:55
  • 1632

Android Studio 利用Gradle来混淆代码

其实代码混淆是个比较复杂的工程,我今天记下的,算是一个小心得,因为正在改bug,还没时间来去研究它是神马东东。 主要注意一点,在build.gradle里面写配置的时候,高版本的Gradle已经不能...
  • u011153817
  • u011153817
  • 2015-11-02 17:38:38
  • 791

从Eclipse转到Android Studio的注意事项

从Eclipse转到Android Studio的注意事项13年的时候做了几个Android应用,后来偶尔更新过两次,就一直放在各大安卓市场,平均每天大致有个十几块的收入。前一阵想起来收钱,就看了下,...
  • sealeader
  • sealeader
  • 2016-01-12 14:00:46
  • 1428

android studio使用的一些细节以及注意事项

一、Android studio导入项目方法http://ask.android-studio.org/?/article/21 点开链接查看这篇文章,可以比较全面的介绍了如何导入项目,包括ecli...
  • Hello201404
  • Hello201404
  • 2016-05-27 10:15:49
  • 694

android studio 导入项目遇到的问题

导入的时候遇到了failde to sync gradle project "XXXX" unknown host 'repor1.maven org' you must need to adjust...
  • u010074054
  • u010074054
  • 2016-01-08 14:35:17
  • 819
    个人资料
    等级:
    访问量: 399
    积分: 42
    排名: 193万+
    文章分类
    文章存档