安全编程之Android APK打包代码混淆(代码实例)


本文摘自PHP中文网,作者云罗郡主,侵删。

本篇文章给大家带来的内容是关于安全编程之Android APK打包代码混淆(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

第一步:在项目工程目录下的proguard-rules.pro文件中配置自定义的混淆规则

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

#注意:

#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......

第二步:在项目工程目录下的build.gradle文件中修改

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

   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('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

以上就是对安全编程之Android APK打包代码混淆(代码实例)的全部介绍,如果您想了解更多有关HTML视频教程,请关注PHP中文网。

以上就是安全编程之Android APK打包代码混淆(代码实例)的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

判断登陆是否失效代码

html5上传图片ios系统和Android系统下均显示摄像头拍照和图片选择

Android中如何使用html渲染的方式实现必填项前面的*号

canvas绘制各种基本图形

浅谈Android设置透明度、黑暗度的三种方法

dreamweaver怎么使用标签及代码设计表格?_dreamweaver教程_网页制作

Android四大组件是什么

html5实现文字轮滚的示例代码

html5和原生app如何进行交互?

时间倒计时实现代码

更多相关阅读请进入《Android》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...