Android studio 混淆配置详解

yizhihongxing

Android Studio 混淆配置详解

什么是混淆?

混淆(Proguard)是 Android 应用程序构建工具中的一个开源的代码缩减、优化和混淆工具。在编译 APK 文件的过程中,代码混淆可以将类名、方法名、变量名等一些敏感信息混淆成一个无法识别的字符串,以增加代码的安全性和减小 APK 大小。

如何进行混淆?

在 Android Studio 中进行混淆大致分为以下几个步骤:

  1. 配置混淆

在 app 模块下的 build.gradle 文件中,可以添加以下代码进行配置混淆信息:

android {
    ...
    buildTypes {
        release {
            minifyEnabled true // 是否开启混淆,默认为 false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 指定混淆规则
        }
    }
}

其中,getDefaultProguardFile('proguard-android-optimize.txt')是默认的混淆配置文件,'proguard-rules.pro'是我们自己定义的混淆规则文件。

  1. 定义混淆规则

在项目根目录下的 proguard-rules.pro 文件中定义混淆规则。通常情况下,我们会保留一些通过反射调用的类、方法、属性等信息。下面是一个简单的例子:

-keep public class com.example.app.User {
    public <init>();
    public void setName(java.lang.String);
    public java.lang.String getName();
}

其中,-keep 指定要保留的信息,public class com.example.app.User 指定了要保留的类,后面紧跟的是保留的方法、属性等信息。

  1. 进行混淆

在进行 build 时,选择 release 模式即可进行混淆。

示例说明

接下来,我们将通过两个示例详细说明如何进行混淆:

示例1:保留自己编写的工具类

假如我们有一个自己编写的 Utils 工具类,我们希望在混淆时将其保留不被删除。

首先,在 proguard-rules.pro 文件中添加以下规则:

-keep class com.example.app.Utils {
    <methods>;
}

接着,进行 build 时选择 release 模式即可。此时,我们可以在混淆后的代码中发现 Utils 类并没有被混淆。

示例2:保留第三方库的类

假如我们使用了第三方库,需要保留其中一些类不被混淆。以 Glide 图片加载库为例:

首先,我们需要在 app 模块下的 build.gradle 文件中添加 Glide 库的依赖:

dependencies {
    ...
    implementation 'com.github.bumptech.glide:glide:4.11.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}

然后,我们需要在 proguard-rules.pro 文件中添加以下规则:

-keep public class com.bumptech.glide.** {
    public protected *;
}

其中,"." 表示匹配任何字符,"**" 表示匹配任意子包。

最后,进行 build 时选择 release 模式即可。此时,我们可以在混淆后的代码中发现 Glide 相关的类并没有被混淆。

总结

在进行混淆前,需要仔细考虑需要保留哪些类、方法、属性等信息。如果混淆的过程中遇到问题,可以通过增加准确的混淆规则来解决。同时,在进行混淆时,可以通过在混淆后的代码中查看类名、方法名等信息来判断混淆是否成功。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android studio 混淆配置详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • PHP如何读取由JavaScript设置的Cookie

    当 JavaScript 在客户端设置了 Cookie 后,PHP 服务端需通过 $_COOKIE 超全局变量来访问它。 要读取使用 JavaScript 设置的 Cookie,可以遵循以下步骤: 在 JavaScript 端通过 document.cookie 设置 Cookie。 在 PHP 端使用 $_COOKIE 超全局变量读取 Cookie 值。 …

    JavaScript 2023年6月11日
    00
  • js中this的指向问题归纳总结

    绝大部分的新手,在学习JavaScript时都会遇到一个非常常见的问题:无法理解 this 的指向问题。这也是Javascript的一个复杂和有争议性的部分,本攻略旨在帮助读者归纳总结“js中this的指向问题”。 什么是 this this 是 JavaScript 中的一个关键字,它是一个对象,并且它是由函数来调用的。this 的值在每个函数调用的时候都…

    JavaScript 2023年6月10日
    00
  • JavaScript创建对象的七种方式全面总结

    JavaScript创建对象的七种方式全面总结 在JavaScript中,有多种方式可以创建对象,本篇文章将介绍七种常用的创建对象的方式,并通过示例代码对其进行详细的讲解。 1. 对象字面量 最常用的创建对象的方式就是使用对象字面量,即在花括号内定义属性和值。 示例代码: var person = { name: "John", age:…

    JavaScript 2023年5月27日
    00
  • PHP中cookies使用指南

    首先让我们来介绍一下PHP中cookies的概念和使用方法。 什么是cookies? 在HTTP协议中,cookie是指服务器通过 HTTP 协议向客户端(通常是浏览器)发送的小型数据文件,该文件会在客户端下次通过 HTTP 协议访问同一服务器时发送到服务器,以便服务器能够获取和识别客户端信息。通俗的说,cookie就是浏览器和服务器之间的一种通信方式。 c…

    JavaScript 2023年6月11日
    00
  • javascript 打印内容方法小结

    下面是关于“JavaScript 打印内容方法小结”的详细攻略。 一. JavaScript中的console.log() console.log()是JavaScript中最常用的输出方法,可以在控制台中打印内容。以下是使用console.log()打印的示例代码: console.log("Hello, world!"); // 打印…

    JavaScript 2023年5月28日
    00
  • Javascript Date getDay() 方法

    以下是关于JavaScript Date对象的getDay()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getDay()方法 JavaScript Date对象的getDay()方法返回一个星期中的某一天(0-6)。该方法可用获取当前日期的星期几。 下是使用Date对象的getDay()方法的示例: var date = new…

    JavaScript 2023年5月11日
    00
  • JavaScript canvas绘制动态圆环进度条

    现在我来详细讲解如何通过 JavaScript canvas 绘制动态圆环进度条的完整攻略。 概述 原理:利用 <canvas> 标签绘制一个圆环,再通过控制圆环的起始弧度和结束弧度来实现进度条的动态效果。 需要掌握的知识: HTML5 <canvas> 标签的使用 ctx.beginPath()、ctx.closePath()、ct…

    JavaScript 2023年6月11日
    00
  • jquery checkbox 勾选的bug问题解决方案与分析

    关于“jQuery Checkbox 勾选的 Bug 问题解决方案与分析”,我们来进行一番详细的讲解。 问题描述 在 jQuery 中,我们经常会用到“复选框”(checkbox)这个元素。比如说我们希望用户在注册时选择自己的性别,就可以用到男、女两个 checkbox。但是在实际开发中,我们可能会遇到以下问题: 当用户选择某一个 checkbox 时,其他…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部