Android 反编译与混淆

2018-03-15  本文已影响0人  潜心之力

一、反编译

二、混淆

#微信
-keep class com.tencent.mm.opensdk.** {
   *;
}
-keep class com.tencent.wxop.** {
   *;
}

#网易云信
-dontwarn com.netease.**
-keep class com.netease.** {*;}

# okhttp3
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

# glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

-keepclasseswithmembers class com.activity.** {*;}
-keepclasseswithmembers class com.model.** { *; }
-keepclasseswithmembers class com.util.** {public *** *(***);}
#不混淆某个类  
-keep public class com.example.Test { *; }  
#不混淆某个包所有的类  
-keep class com.test.** { *; }  
#不混淆某个类的子类  
-keep public class * extends com.example.Test { *; }  
#不混淆所有类名中包含了“model”的类及其成员  
-keep public class com.** {*;}  
#不混淆某个接口的实现  
-keep class * implements com.example.Interface { *; }  
#不混淆某个类的构造方法  
-keepclassmembers class com.example.Test {   
  public <init>(); -> 匹配被public修饰的构造方法
}  
#不混淆某个类的特定的方法  
-keepclassmembers class com.example.Test {   
  public void test(java.lang.String); -> 匹配传参为String类型的方法
}  
#保留某些类及某些成员方法
-keepclassmembers public class * extends android.view.View {
   public void *(android.view.View); ->匹配传参为View的任意方法
   public static <fields>; -> 匹配被static修饰的区域
   public *** <methods>; -> 匹配被public修饰的任意类型的方法
   public *** *(***); -> 核心
   void set*(***);
   *** get*();
}
-keep 指定需要保留的类和类成员
-keepclassmembers 指定需要保留的类成员:变量或者方法
-keepclasseswithmembers 指定保留的类和类成员,条件是所指定的类成员都存在
-keepnames 指定要保留名称的类和类成员,仅用于模糊处理
-keepclassmembernames 指定要保留名称的类成员,仅用于模糊处理
-keepclasseswithmembernames 指定要保留名称的类成员,仅用于模糊处理
-keepattributes SourceFile,LineNumberTable 保留行号
-keepdirectories 指定要保持的目录结构
-keepattributes Signature 保持泛型
-dontwarn 压缩,如果有警告也不终止
-ignorewarnings 忽略警告,避免打包时某些警告出现
-optimizationpasses 指定压缩级别
-dontusemixedcaseclassnames 包名不混合大小写
-dontskipnonpubliclibraryclassmembers 不跳过非公共的库的类成员
<field> 匹配类中的所有字段
<method> 匹配类中的所有方法
<init> 匹配类中的所有构造函数
* 匹配任意长度字符,但不含包名分隔符(.)
** 匹配任意长度字符,并且包含包名分隔符(.)
*** 匹配任意参数类型
… 匹配任意长度的任意类型参数

三、真机调试

1、更改(app)build.grade文件,Tip:手机通过USB安装的Apk属于Debug版本

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.singApk"
        minSdkVersion 21  -> 以免真机不能安装apk
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs { //配置apk签名信息,二选一

        debug {  //生成调试版的apk
            storeFile file("../debug.keystore")
        }

        release { //生成正式版的apk
            keyAlias 'keyAlias'
            keyPassword 'keyPassword '
            storeFile file('../debug.keystore')
            storePassword 'storePassword '
        }
    }

2、更改AndroidStudio的配置,选择 File -> setting -> Build,Execution,Deployment -> Instant Run


取消勾选框里的选项

3、真机的权限允许
不同的厂商有不同的权限配置,需根据不同的手机,自行搜索需要允许的权限

四、资源目录分类

当资源文件数量足够庞大的时候,为方便日后开发及维护,建议将资源文件分包管理

android {  -> app.build
    sourceSets{
        main{
            res.srcDirs=
                    [
                            'src/main/res/layout/activity',

                            'src/main/res/layout/fragment',

                            'src/main/res/layout/adapter',

                            'src/main/res/layout/popwindow',

                            'src/main/res/layout/dialog',

                            'src/main/res/layout',

                            'src/main/res'
                    ]
        }
    }
}
将layout文件分类
上一篇下一篇

猜你喜欢

热点阅读