1、代码检测,检测debuggable状态是否被修改过,检测签名是否一致

        

//安全监测,防止反编译
public void securityCheckCode(){
// 如果程序android:debuggable="false"是否被修改过,强制关闭应用
if ((this.getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
android.os.Process.killProcess(android.os.Process.myPid());
}
 
// 防止重新编译,检测签名是否一致
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(),
PackageManager.GET_SIGNATURES);
Signature[] signs = packageInfo.signatures;
Signature sign = signs[0];
 
int hashcode = sign.hashCode();
//签名hash值
if(hashcode!=-1555711042){
android.os.Process.killProcess(android.os.Process.myPid());
}
} catch (NameNotFoundException e) {
Log.e(TAG, e.toString());
}

}

2.禁用日志

在proguard.cfg中配置
删除-dontoptimize 配置
-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(...);
}

3、代码混编

   在proguard.cfg中配置