美文网首页
android 代码混淆 简单介绍1

android 代码混淆 简单介绍1

作者: XX杰 | 来源:发表于2018-03-07 19:43 被阅读0次

混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。

首先,这里说的的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。依靠 ProGuard,混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的瓶颈;同时,将类、类成员、方法重命名为无意义的简短名称,增加了逆向工程的难度。而依靠 Gradle 的 Android 插件,我们将移除未被使用的资源,可以有效减小 apk 安装包大小。

在这里只简单的介绍一般的混淆,适用于绝大部分产品

    1、修改build.gradle文件
      android {
buildTypes {
    release {
        minifyEnabled true    //将release下minifyEnabled的值改为true,打开混淆
        shrinkResources true  //打开资源压缩
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
    }

    2、自定义混淆规则
          需要在对应的proguard-rules.pro 文件中进行说明,有其对应的语法规则,不是很全,但本人测试,还可以使用。

        #指定压缩级别
      -optimizationpasses 5

        #不跳过非公共的库的类成员
    -dontskipnonpubliclibraryclassmembers

        #混淆时采用的算法
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

        #把混淆类中的方法名也混淆了
    -useuniqueclassmembernames

        #优化时允许访问并修改有修饰符的类和类的成员 
    -allowaccessmodification

        #将文件来源重命名为“SourceFile”字符串
    -renamesourcefileattribute SourceFile
        #保留行号
    -keepattributes SourceFile,LineNumberTable

        #保持所有实现 Serializable 接口的类成员
    -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();
    }

        #Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
    -keep public class * extends android.support.v4.app.Fragment
    -keep public class * extends android.app.Fragment

        # 保持测试相关的代码
    -dontnote junit.framework.**
    -dontnote junit.runner.**
    -dontwarn android.test.**
    -dontwarn android.support.test.**
    -dontwarn org.junit.**

      除此之外,我们还需要针对某些特殊的类需要保持其不备混淆,比如入口类和入口函数(就是被外部调用的类)。还有一些第三方的库等,不能被混淆。

混淆的期间有助于我们检查code。精简代码,查找bug,逐渐认识到自己的问题。

相关文章

  • android 代码混淆 简单介绍1

    混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实...

  • ProGuard详解

    Android分享:代码混淆那些事Android代码混淆之混淆规则Android-Dev-Favorites An...

  • Bugly使用篇之Java错误堆栈还原

    前言 前面介绍了 Android混淆代码错误堆栈还原,相信大家已经知道如何通过Retrace在本地进行混淆代码还原...

  • Android代码混淆

    待整理。。。 参考: Android混淆从入门到精通 Android代码混淆之混淆规则 代码混淆规则配置文件:pr...

  • 安卓-混淆

    混淆 1.简单介绍 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等...

  • android安全加固技术

    先介绍5种android apk安全技术,其它后面补充 1、代码混淆 原理:本质就是改变类名、方法名,使代码可读性...

  • 代码混淆

    1) 前言 ProGuard是一个开源的Java代码混淆器。它可以混淆Android项目里面的java代码,对的,...

  • Android-SDK默认混淆配置ProGuard

    一.介绍 二.混淆配置 1.自定义混淆文件proguard-rules.pro 2.Android SDK默认混淆...

  • 缩减apk的体积

    1.使用Progruard Proguard是Android很早就使用的代码混淆工具,除了用于混淆代码提高安全性以...

  • Android NDK混淆

    项目原因研究Android的So库代码混淆,增加IDA工具查看的复杂度。简单接触了ollvm 混淆组件。网上查看了...

网友评论

      本文标题:android 代码混淆 简单介绍1

      本文链接:https://www.haomeiwen.com/subject/dvrsfftx.html