Maison  >  Article  >  interface Web  >  Programmation de sécurité Obfuscation du code de packaging APK Android (exemple de code)

Programmation de sécurité Obfuscation du code de packaging APK Android (exemple de code)

云罗郡主
云罗郡主avant
2018-10-17 14:18:052393parcourir

Ce que cet article vous apporte concerne l'obscurcissement du code d'emballage Android APK (exemples de code) pour une programmation sécurisée. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Étape 1 : Configurez les règles d'obscurcissement personnalisées dans le fichier proguard-rules.pro dans le répertoire du projet

#注意:
#1.引用外部的jar包 如果不是自己写的最好不混淆它们,因为外部jar包有可能已经混淆过
#2.不要混淆XML布局中使用的自定义控件类,混淆后加载布局会报找不到该控件错误
#3.不要混淆Manifests中配置的组件类,混淆后系统会找因不到该组件而报错
#------------------------------------------------------------------
#指定代码的压缩级别
-optimizationpasses 5
#表示混淆时不使用大小写混合类名,混淆后的类名为小写
-dontusemixedcaseclassnames
#表示不进行优化,建议使用此选项,因为根据proguard-android-optimize.txt中的描述,优化可能会造成一些潜在风险,不能保证在所有版本的Dalvik上都正常运行。
-dontoptimize
# 混淆时输出日志
-verbose
#混淆时所采用的算法,一般不改变,用谷歌推荐算即可
-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
#表示不混淆任何包含native方法的类的类名以及native方法名
-keepclasseswithmembernames class * {
    native <methods>;
}
#表示不混淆任何一个View中的setXxx()和getXxx()方法,因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}
#表示不混淆Activity中参数是View的方法,因为有这样一种用法,在XML中配置android:onClick=”buttonClick”属性,当用户点击该按钮时就会调用Activity中的buttonClick(View view)方法,如果这个方法被混淆的话就找不到了。
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}
#表示不混淆枚举中的values()和valueOf()方法
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#表示不混淆Parcelable实现类中的CREATOR字段,毫无疑问,CREATOR字段是绝对不能改变的,包括大小写都不能变,不然整个Parcelable工作机制都会失败。
-keepclassmembers class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator CREATOR;
}
#表示不混淆R文件中的所有静态字段,我们都知道R文件是通过字段来记录每个资源的id的,字段名要是被混淆了,id也就找不着了。
-keepclassmembers class **.R$* {
    public static <fields>;
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
#过滤掉自己编写的实体类以及自定义控件类
-keep class com.beacon.supertool.bean.**{*;}
-keep class com.beacon.supertool.widget.**{*;}

#不需要混淆第三方类库
-dontwarn android.support.v4.**                #去掉警告
-keep class android.support.v4.** { *; }        #过滤android.support.v4
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
#不需要混淆butterknife
-dontwarn butterknife.**
-keep class butterknife.** { *;}
#不需要混淆gson
-dontwarn com.google.**
-keep class com.google.gson.** {*;}
#不需要混淆glide
-dontwarn com.bumptech.glide.**
-keep class com.bumptech.glide.** {*;}
#不需要混淆okhttp3 okio
-dontwarn okhttp3.**
-keep class okhttp3.** {*;}
-dontwarn okio.**
-keep class okio.** {*;}

#不需要混淆第三方库库或jar......

Étape 2 : Créez dans le répertoire du projet

   buildTypes {
//      debug版本的配置
        debug {
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            signingConfig signingConfigs.debug
        }
//      release版本的配置
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //混淆
            minifyEnabled true
            //Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            proguardFiles getDefaultProguardFile(&#39;proguard-android.txt&#39;), &#39;proguard-rules.pro&#39;
        }
    }
Ce qui précède est l'introduction complète à l'obfuscation du code de packaging APK Android (exemples de code) pour une programmation sécurisée. Si vous souhaitez en savoir plus sur le

Tutoriel vidéo HTML, veuillez faire attention au site Web PHP chinois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer