Android 代码混淆

以前从网上找的一段代码,时间一长,忘了具体是哪个网址了,如果涉及版权,还请您指出,多多包涵。
将以下代码复制到文件 proguard-rules.pro 即可,具体解释见代码注释,先发到这里以免忘记,以后有时间了再完善吧。
编程环境:Windows 7 64bit+Android Studio 3.1.4

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

#--------------------------------------------------------------------------
#---------------------------------深入了解---------------------------------
#先逐条介绍下基本指令区指令的含义
#-optimizationpasses 5
#代码混淆的压缩比例,值在0-7之间
#-dontusemixedcaseclassnames
#混淆后类名都为小写
#-dontskipnonpubliclibraryclasses
#指定不去忽略非公共的库的类
#-dontskipnonpubliclibraryclassmembers
#指定不去忽略非公共的库的类的成员
#-dontpreverify
#不做预校验的操作
#-verbose
#-printmapping proguardMapping.txt
#生成原类名和混淆后的类名的映射文件
#-optimizations !code/simplification/cast,!field/*,!class/merging/*
#指定混淆是采用的算法
#-keepattributes *Annotation*,InnerClasses
#不混淆Annotation
#-keepattributes Signature
#不混淆泛型
#-keepattributes SourceFile,LineNumberTable
#抛出异常时保留代码行号
#基本指令区基本介绍完了,说下2条用的最多的指令
#-keep class XXXX
#保留类名不变,也就是类名不混淆,而类中的成员名不保证。当然也可以是继承XXX类的所有类名不混淆
#-keepclasseswithmembers class XXXX
#--------------------------------------------------------------------------
#--------------------------------定制化区域--------------------------------
#
#---------------------------------1.实体类---------------------------------
#实体类由于涉及到与服务端的交互,各种gson的交互如此等等,是要保留的。
#将你项目中实体类都拎出来,用以下语法进行保留。
#-keep class 你的实体类所在的包.** { *; }
#如我的项目下类User的完整路径为:com.demo.login.bean.User, 那我的混淆如下
#-keep class com.demo.login.bean.** { *; }
#--------------------------------------------------------------------------
#你的混淆写这个位置

#--------------------------------------------------------------------------
#
#---------------------------------2.第三方包-------------------------------
#打开你的build.gradle文件,查看你用了哪些第三方的包。
#
#dependencies {
#    compile 'com.github.bumptech.glide:glide:3.7.0'
#    compile 'org.greenrobot:eventbus:3.0.0'
#}
#我这里用了glide,eventbus。我去他们的官网把已经写好的混淆copy下来。
#--------------------------------------------------------------------------
##eventBus
#-keepattributes *Annotation*
#-keepclassmembers class ** {
#    @org.greenrobot.eventbus.Subscribe <methods>;
#}
#-keep enum org.greenrobot.eventbus.ThreadMode { *; }
#-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
#    <init>(java.lang.Throwable);
#}
##glide
#-keep public class * implements com.bumptech.glide.module.GlideModule
#-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
#  **[] $VALUES;
#  public *;
#}
#一般官网都是有混淆的,没有的话就google,也没有的话自己按照上面的写法自己写
#还不会的话。。。。。只能换个包。。。。。如果你是直接包含的jar包的话,你这样写
##log4j
#-libraryjars log4j-1.2.17.jar
#-dontwarn org.apache.log4j.**
#-keep class  org.apache.log4j.** { *;}
#大致意思就是不混淆,不报warn。
#如果gradle报错的话,可以考虑注释掉-libraryjars log4j-1.2.17.jar这句。
#--------------------------------------------------------------------------
#你的混淆写这个位置

#--------------------------------------------------------------------------
#
#-------------------------------3.与js互相调用的类-------------------------
#第三部分与js互调的类,工程中没有直接跳过。一般你可以这样写
#-keep class 你的类所在的包.** { *; }
#如果是内部类的话,你可以这样
#-keepclasseswithmembers class 你的类所在的包.父类$子类 { <methods>; }
#例如
#-keepclasseswithmembers class com.demo.login.bean.ui.MainActivity$JSInterface {
#      <methods>;
#}
#--------------------------------------------------------------------------
#你的混淆写这个位置

#--------------------------------------------------------------------------
#
#------------------------4.反射及序列化相关的类和方法----------------------
#工程中没有直接跳过。类的话直接这样
#-keep class 你的类所在的包.** { *; }
#--------------------------------------------------------------------------
#你的混淆写这个位置
#由于该类与APP存储的配置相关,故不能混淆
-keep class cn.pyqx.smsmonitor.WidgetConfig {*; }
#--------------------------------------------------------------------------
#
#---------------------------------基本指令区-------------------------------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-printmapping proguardMapping.txt
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
#--------------------------------------------------------------------------
#
#---------------------------------默认保留区-------------------------------
-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 * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.** {*;}

-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
#--------------------------------------------------------------------------
#
#---------------------------------webview----------------------------------
-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
   public *;
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, jav.lang.String);
}
#--------------------------------------------------------------------------
#
#---------------------------------去掉Log----------------------------------
#需要gradle配合,修改代码如下:
#buildTypes {
#    release {
#        minifyEnabled true
#        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
#    }
#}
-assumenosideeffects class android.util.Log{
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}
#--------------------------------------------------------------------------
#----------------------------------配置结束--------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值