首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入探索 Android 包瘦身(上)

使用如下规则可以关闭混淆: -dontobfuscate 关闭混淆 Proguard 的优化细节 Proguard 中所做的优化包括 内联、修饰符、合并类和方法等 30 多种优化项,在特定的情况下,它尽可能地做了相应的优化...,此外,proguard-android-optimize.txt 也是 sdk 默认的混淆配置,但是它 默认打开了优化开关。...在优化遍历的顺序中,尤其是数学运算和字符串运算可从中受益。 3、最后,ProGuard 具有独特的能力来优化使用 GSON 库将对象序列化或反序列化为 JSON 的代码。...而 ProGuard 的优化功能可以 通过更高效,直接的访问方式 来代替它。...可以看到,ReDex 的功能非常强大,如果能够深入了解 ReDex 源码中的各个功能模块的实现,你将具有非常强硬的技术资本。

2.1K30

Proguard 常用规则

在其他优化中,可以将不是入口点的类和方法设为私有,静态或最终,可以删除未使用的参数,并且可以内联一些方法。 在混淆阶段,ProGuard会重新命名不属于入口点的类和类成员。...过滤器 ProGuard为配置的许多不同方面提供了过滤器选项:文件名称,目录,类别,软件包,属性,优化等。 过滤器是可以包含通配符的逗号分隔名称列表。只有与列表中的项目匹配的名称才会通过过滤器。...因此,如果名称与过滤器中的某个项目相匹配,则会立即接受或拒绝该项目,具体取决于项目是否具有否定符。 如果名称与项目不匹配,则会针对下一个项目进行测试,依此类推。...例如,考虑两个不同的接口,它们包含具有相同名称和签名的方法。如果没有此选项,这些方法可能会在第一个混淆步骤中获取不同的混淆名称。...它可能仍会删除,优化或混淆其他班级成员。 如果指定了一个方法,则ProGuard仅将该方法作为入口点进行保存。其代码可能仍会进行优化和调整。 类规范 类规范是类和类成员(字段和方法)的模板。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    “码码”再也不用担心我的代码被反编译了!

    二、牛X工具 ProGuard是一个压缩、优化和混淆Java字节码文件的免费、开源的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。...目前最新版本:proguard4.10版本(官方) 测试使用的是:proguard3.8版本(汉化版) 它处理的顺序是:先压缩,然后优化,最后才进行混淆。...对于复杂的混淆来说,图形界面中没有的属性,就要参考proguard提供的使用文件,按照自己想要的要求在.pro文件中配置了。其实proguard的使用关键就是编写这个配置文件。...测试登录、各模块与Action相关的功能是否能正常运行。需要详细测试。 五、问题汇总 在使用progurad进行混淆时和测试时遇到的一些问题,总结了一下。...问题1:混淆是针对.class文件混淆,但是出现如下问题,AJAX实现的功能,没法重现。如下: 解决方案: (1) 把AJAX的代码,删了,写成js。

    3K60

    Android热更新方案Robust开源,新增自动化补丁工具

    当然ProGuard做的优化工作还远远不止这些,那我们如何应对ProGuard的优化,才能保证补丁中的混淆关系和线上APK中的混淆关系保持一致呢?...基本上有如下三种解决办法: 1. applymapping ProGuard提供了使用指定mapping来进行混淆的功能,就是在proguard-rules.pro文件中添加applymapping这个配置型...总的来说,补丁的自动化过程中主要有这么两类问题: Java编译器的优化 ProGuard的优化 其中第一类问题并没有增加补丁制作技术难度,但是会具有一些迷惑性,需要去分析这种的语法糖的底层实现,搞明白其实现的原理...大体可以总结为三大问题:混淆、优化、内联,其中优化相关操作,比如说改变方法签名和删除方法,我们可以把这类问题划归到内联,因为在优化后的代码里面这些方法和内联的方法一样,都消失了。...对于ProGuard修改访问性的问题,使用反射的方式可以很好地解决这个问题,但是这样可能会引入一个问题,由于ProGuard之后,各个方法和字段的名字混淆为简单字母,比如a、b之类的,子类和父类很大可能行会出现不同的方法或者字段被混淆成一样简单字母

    1.8K50

    Android插件化基础3----Android的编译打包流程详解

    官方流程.png 虚线方框是打包APK的操作,现在开发Android都是使用的Android Studio基于gradle来构建项目,所有打包操作都是执行gradle脚本来完成,gradle编译脚本具有强大的功能...ProGuard是一个混淆代码的开源项目,它的主要作用是混淆代码,但是其实它主要有4个功能如下: 1 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute) 2 优化...proguardgui.jar:是Proguard提供的一个图形界面工具,通过proguardgui.jar可以方便的查看和编辑Proguard配置,以及调用proguard.jar来执行一次优化过程。...,基本混淆 第二步,针对APP量身定制 第三步,针对第三方jar包的解决方法 下面我们就来详细看下 2.1 基本混淆 基本混淆又可以分为 基本指令 需要保留的东西 2.1.1 基本混淆 混淆文件的基本配置信息...针对第三方jar包的解决方案 我们在Android项目中不可避免要使用很多第三方提供的SDK,一般而言,这些SDK是经过ProGuard混淆的,而我们所需要做的就是避免这些SDK的类和方法在我们APP

    2.1K22

    混淆技术 发布于 2023年05月30

    它可以缩小、优化和混淆你的字节码,除此之外,它还可以移除无用的代码。ProGuard已经被整合在Android的官方开发工具集SDK中,因此你无需单独安装。...DexGuard:这是由ProGuard的开发者创建的一个商业混淆工具,专门针对Android应用进行优化。...'), 'proguard-rules.pro' } } } 配置ProGuard规则:ProGuard需要一些规则来知道它应该如何混淆你的代码。...ProGuard的一些优化规则,例如删除无用的代码和无用的字段: -optimizations !...配置ProGuard规则可能会比较复杂,因为你需要找到一个平衡,使得你的代码得到足够的保护,同时不破坏你的应用的功能。如果你的应用在混淆后崩溃或者出现问题,你可能需要调整你的ProGuard规则。

    45030

    第八章 自定义Android Gradle工程

    8.4 使用混淆 代码混淆是一个非常有用的功能,它不仅可能优化我们的代码,让我们的Apk包变得更小,还可以混淆我们原来的代码,让反编译的人不容易看明白我们业务逻辑,很难分析。...Android SDK默认为我们提供了两个Proguard配置文件,他们分别是proguard-android.txt和proguard-android-optimize.txt,一个是没有优化的,一个是优化的...除了在BuildType中启用混淆和配置混淆外,我们也可以在defaultConfig中启用和配置,还记得我们前面在8.1章节讲的吧,因为这个是默认配置,一般用的比较少。...我们还可以针对个别渠道,启用和配置Proguard混淆,多渠道包是通过productFlavors配置的,productFlavors是一个NamedDomainObjectContainer域对象,其配置的渠道本质上就是一个ProductFlavor,和defaultConfig是一样的,所以每个渠道也可以单独的启用和配置Proguard混淆。

    62210

    Eclipse与Android源码中ProGuard工具的使用

    ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。...此时就要用到我们刚才提到的混淆的个性化配置文件proguard-project.txt,在其中去配置不需要混淆的类、方法和变量等。关于混淆文件的具体配置方法,请看下面的最后一个标题会有详述。...如果不想对整个工程代码混淆,而只是相对某个模块混淆的话,就先不要动这里的代码。 接着建议将真个工程new一遍,之后就可以针对具体的apk文件进行混淆文件的设置和定制了。...(有些模块没有这两句句,就自己手动加上) 反之,如果用户已经在alps/build/core/package.mk打开了全工程混淆编译的控制点后,又在针对某个模块时不想混淆编译怎么办?...此时就需要我们配置混淆的个性化文件proguard-project.txt(eclipse环境中)或者proguard.flags(android源码环境),在其中去配置不需要混淆的类、方法和变量等。

    1.3K90

    Android Proguard(混淆)

    介绍 ---- 我们通常说的proguard包括四个功能,shrinker(压缩), optimizer(优化),obfuscator(混淆),preverifier(预校验)。 ?...(下面会讲) 除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它的功能包括资源混淆,字符串加密,类加密和dex文件分割等。...目标文件针对java6的情况下,预校验是可选的;针对java7的情况下,预校验是必须的,除非目标运行平台是Android平台,设置它可以节省一点点时间。...如果声明保护一个方法,proguard会把它当作程序的入口点,方法名不会变,但它里面的代码依旧会被优化、混淆。...allowoptimization 修饰-keep, 声明一个元素可以被优化,即使它已经声明被保护。这意味着该元素参与优化阶段,但是不参与压缩和混淆阶段。特殊用途的时候使用。

    2.7K30

    微信Android增量Proguard方案

    ,也不允许您修改优化的行为,比如-optimizations 和 -optimizationpasses,这种黑盒的行为往往一旦出现了问题,高昂的维护成本也不容忽视;第三章节我们将进一步解释采用Proguard...,往往提交的代码并不多,一次提交全量构建,属实恶劣,那能否针对增量修改的代码部分进行增量Proguard呢?...而 R8 【图6】是 D8 的衍生产品,旨在集成 ProGuard 和 D8 的功能,目前仍在优化中,逐渐成熟,具体查看QuardSquare官网[1]了解更多。...Patch大小也有一定帮助,有了自己的Dex优化,在将来的一段时间内我们仍然使用Proguard,这是主要原因; 下面重点介绍增量混淆核心工作: 增量混淆  先来看一下Proguard的大致输入输出流程...return value 优化 同样method的 return value也会存在优化的情况,考虑到在微信此优化数量并不明显,这里通过配置!

    2.3K20

    iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

    虽然网上都有,但是对于我个人来说,很难找到一篇博客概括完全的,所以还是总结一下,也算是学习的纪录。首先看看代码混淆是什么。总的来说,代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。...(通过这种方式创建的工程在文件结构方面可能和直接使用eclipse或android-studio创建的工程有略微差别,但是影响不大)在android 2.3之后,sdk中就已经集成了混淆器proguard...// signingConfig signingConfigs.release } }按照上面的配置,在debug模式和release模式下build都会进行代码混淆...混淆规则配置文件与eclipse工程略有不同,android-studio工程的混淆规则文件是 app/proguard-rules.pro 。...虽然文件名和eclipse中的不同,但是配置规则都是相同的。自己动手配置代码混淆应该不是问题。

    19810

    android混淆那些坑

    压缩(Shrink):侦测并移除代码中无用的类、字段、方法、和特性(Attribute)。 优化(OPtimize):对字节码进行优化,移除无用指令。...在混淆的步骤中,ProGuard会对非EntryPoint的类和方法进行重命名。 Proguard使用 Proguard工具目录结构 ?...Proguard四项核心功能shrink,optimize,obfuscate和preverify的执行都是由proguard.jar来完成的,不过proguard.jar只能通过命令行方式来使用。...proguardgui.jar是Proguard提供的一个图形界面工具,通过proguardgui.jar可以方便的查看和编辑Proguard配置,以及调用proguard.jar来执行一次优化过程。...// 只使用配置文件 java -jar proguard.jar @myconfig.pro -verbose // 混合使用配置文件和配置选项 proguardgui.jar的使用 使用

    3.3K60

    SpringBoot 玩一玩代码混淆,防止反编译代码泄露

    编译 简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥...一共就两步 第一步, 在项目路径下,新增一份文件 proguard.cfg : proguard.cfg #指定Java的版本 -target 1.8 #proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等...-dontshrink #是否关闭字节码级别的优化,如果不开启则设置如下配置 -dontoptimize #混淆时不生成大小写混合的类名,默认是可以大小写混合 -dontusemixedcaseclassnames...-- 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项,也就是说使用proguard.cfg那么options下的所有内容都可以移到proguard.cfg中 -->...--这里特别重要,此处主要是配置混淆的一些细节选项,比如哪些类不需要混淆,哪些需要混淆--> <!

    1.1K20

    ProGuard 在 Android 上的使用姿势

    xitu/gold-m… 译者:dieyidezui 校对者:corresponding 为什么使用 ProGuard ProGuard 是一个压缩、优化、混淆代码的工具。...有的开发者更关心混淆这块功能,对我而言最大的用处是打包时移除 dex 中的无用代码。 ? 一个 Android 示例应用的空间分布图,源码地址 Topeka sample app。...如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多的优化效果: 在一些版本的 Android 设备上,DEX 代码会在安装或者运行时被编译成机器码。...“ 按钮), 您可以在 DEX 视图树中看到一些额外功能: 所有的名字都是混淆前的(即您可以看到原始的名字) 被 ProGuard 配置规则 kept 的包,类,方法和属性会显示成粗体 您可以开启 “...关于 ProGuard 和 第三方库 就像您有责任为您自己的代码提供 keep 规则一样,那些第三方库的作者们也有义务向您提供必要的混淆规则配置来避免开启 Proguard 导致的构建失败或者应用崩溃。

    2.6K40

    提高APP安全性的必备加固手段——深度解析代码混淆技术

    ​ 提高APP安全性的必备加固手段——深度解析代码混淆技术 APP 加固方式 iOSAPP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。...下面介绍一下 iOSAPP 加固的具体实现方式。 混淆代码: 使用 ProGuard 工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解。...使用方式:在 build.gradle 文件中配置 proguard-rules.pro 文件,然后在项目构建时执行混淆。...'), 'proguard-rules.pro'         // 默认的 ProGuard 文件和自定义的规则文件     } } 在项目根目录中创建一个 proguard-rules.pro 文件...加固可能会对应用程序的性能和稳定性产生影响,需要在加固的同时保证应用程序的正常运行。 加固需要经过充分测试与验证,确保应用程序没有异常,预期功能都正常运行。

    46720

    SpringBoot 玩一玩代码混淆,防止反编译代码泄露

    编译 简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥...一共就两步 第一步, 在项目路径下,新增一份文件 proguard.cfg : proguard.cfg #指定Java的版本 -target 1.8 #proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等...-dontshrink #是否关闭字节码级别的优化,如果不开启则设置如下配置 -dontoptimize #混淆时不生成大小写混合的类名,默认是可以大小写混合 -dontusemixedcaseclassnames...-- 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项,也就是说使用proguard.cfg那么options下的所有内容都可以移到proguard.cfg中 -->...--这里特别重要,此处主要是配置混淆的一些细节选项,比如哪些类不需要混淆,哪些需要混淆-->

    88630

    【Android 安全】DEX 加密 ( Proguard 简介 | Proguard 相关网址 | Proguard 混淆配置 )

    代码进行如下操作 : 压缩 Shrink : 检测并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate :...Proguard 混淆配置 : -keep 指定 类 , 类成员 , 不被混淆 ; ( 类成员指的是类的成员方法 和 成员属性 ) -keepclassmembers 指定 类成员 不被混淆 , 类...和 类 方法 可以混淆 ; -keepclasseswithmembers 指定 类 和 类成员 , 不被混淆 , 前提是 指定的类成员存在 ; 开启 Proguard : 在 Module 下的 build.gradle...} } 上述 proguard-rules.pro 是开发者自己手动配置的 , 上述 proguard-android-optimize.txt 混淆配置文件是系统自动生成的 , 该 proguard-android-optimize.txt...文件生成的依据是根据开发者的 proguard-rules.pro 混淆配置生成的 ; 编译时打印变量 : 上述使用了 print(“proguardPath = ${getDefaultProguardFile

    80400

    ProGuard混淆

    ProGuard技术的功能概括为以下4项: 1.压缩(shrinks) :检查并移除代码中无用的类,字段,方法,属性。 2.优化(optimizes):对字节码进行优化,移除无用的指令。...4.预检测(Preveirfy):在java平台上对处理后的代码进行再次检测。 详细介绍 (1) ProGuard 配置 -include{filename}:从给定的文件中读取配置参数。...: 优化时允许访问并修改有修饰符的类和类成员变量 混淆 -dontobfuscate 不混淆输入的类文件 -printmapping proguardMapping.txt : 输出映射表 -applymapping...预检测 -dontpreverify 执行ProGuard后会生成的文件: 1)dump.txt 描述apk文件里的所以类的内部结构 2)mapping.txt 列出了原始的和混淆后的类...# 针对第三方jar包的解决方案 # 一般而言,这些SDK都是经过ProGuard混淆了的。 # 而我们所要做的,是避免这些SDK的类和方法在我们的App中被混淆。

    3.2K30

    Android 代码混淆规则

    ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。...它可以将类、字段和方法使用短无意义的名称进行重命名。最后,预校验的Java6或针对Java MicroEdition的所述处理后的码。...2.1 代码混淆 压缩(Shrinking):默认开启,用以减小应用体积,移除未被使用的类和成员,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员)。...-dontobfuscate 关闭混淆 上面这几个功能都是默认打开的,要关闭他们只需配置对应的规则即可。...这里面是一些比较常规的不能被混淆的代码规则。 proguard-rules.pro:针对自己的项目需要特别定义的混淆规则,它位于项目每个Module的根目录下面,里面的内容需要我们自己编写。

    2.6K10

    Android App包瘦身优化实践

    在充分了解了APK各个组成部分以及它们的作用后,我们针对自身特点进行了分析和优化。...开启ProGuard来进行代码压缩,通过使用ProGuard来对代码进行混淆、优化、压缩等工作。...它包括相同的ProGuard规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小APK大小和帮助提高其运行速度。...针对每种图片格式也有各类的优化手段和优化工具。 使用矢量图片 可以使用矢量图形来创建独立于分辨率的图标和其他可伸缩图片。...resources.arsc的优化 针对resources.arsc,笔者尝试过的优化手段如下: 开启资源混淆; 对重复的资源进行优化; 对被shrinkResources优化掉的资源进行处理。

    1.6K30
    领券