Android studio 混淆+打包+验证是否成功

yizhihongxing

下面是关于“Android studio 混淆+打包+验证是否成功”的完整攻略。

1. 什么是混淆

混淆(Obfuscation)是一种通过变更代码名称,使得代码难以理解和阅读的技术。在Android开发中,混淆可以有效的防止反编译和代码盗用。Android Studio为我们提供了混淆功能,我们可以在打包前进行混淆操作。

2. 如何进行混淆

2.1 启用混淆

在Android Studio中启用混淆功能非常简单。在Project的build.grade文件中添加以下代码:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

注意:该代码只能在Release版本中调用,所以你的混淆都是在Release打包的时候才会生效,Debug版本不会生效。

2.2 混淆规则配置

下面我们需要为混淆添加一些规则。混淆规则保存在proguard-rules.pro文件中,该文件位于app文件夹下。在这个文件中会列出需要保护的类、方法等。一些常见的混淆规则:

#保护Java反射类
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.internal.** { *; }

#保护不混淆的类
-keep class com.example.MainApplication { *; }
-keep class * extends android.support.design.widget.AppBarLayout { *; }

#保护Android支付
-keep class com.android.vending.billing.** {*;}
-keepclassmembers class com.android.vending.billing.** {*;}

#保护Okhttp、Retrofit等网络请求库
-keep class okhttp3.** { *; }
-keep class retrofit2.** { *; }
-keepclasseswithmembers class * {
    @retrofit2.http.* <methods>;
}

#保护AndroidX相关
-keep class androidx.appcompat.app.** {*;}

3. 打包生成APK

打包生成APK正常打包的方式,只需选择release版本即可,然后运行gradle的assembleRelease命令即可。

4. 验证混淆是否成功

4.1 查看APK文件

在打包后的app/build/outputs中的apk文件里,先解压apk包,可以看到其中的classes.dex文件(里面是被混淆的代码)。

4.2 反编译apk文件

可以使用工具将apk文件反编译,然后查看代码是否被混淆了。

示例1:

public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    /**
     *
     */
    private void initView() {
        TextView textView = findViewById(R.id.tv_title);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                jumpToSecondActivity();
            }
        });
    }

    /**
     * 跳转到SecondActivity
     */
    private void jumpToSecondActivity() {
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);
    }
}

可以看到,我们在代码中添加了打印日志的语句,那么我们可以通过配置混淆规则,保护该类不被混淆:

#保护MainActivity类
-keep class com.example.myapplication.MainActivity { *; }

经过混淆后,MainActivity的class文件中的名称被全部打乱。

示例2:

添加了类似于AES加密等的处理的代码,为了保护该部分代码不被其他人破解,我们同样需要保护该代码不被混淆:

#保护加解密处理的类
-keep class com.example.myapplication.AESUtil { *; }

经过混淆后,与AES加解密相关的class文件中的名称被全部打乱。

那么我们现在可以通过查看混淆后是否能正常运行来验证混淆是否成功。如果程序没有出现错误并且运行正常,则说明混淆成功。

希望这次的回答能够帮到您,如有遗漏请谅解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android studio 混淆+打包+验证是否成功 - Python技术站

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

相关文章

  • javascript先序遍历DOM树的方法

    关于JavaScript先序遍历DOM树的方法,以下是详细讲解的完整攻略: 什么是DOM树? 首先我们需要了解什么是DOM树,DOM(Document Object Model)树是浏览器用来解析HTML文档时,生成的一颗树状结构。它包含了HTML标签、文本、注释等所有节点,每个节点都是一个实际存在的JS对象。DOM树中的节点按照层级关系排列,我们可以通过J…

    JavaScript 2023年6月10日
    00
  • jQuery getJSON()+.ashx 实现分页(改进版)

    下面就为您详细讲解“jQuery getJSON()+.ashx实现分页(改进版)”的攻略。 一、准备工作 1.创建基础网页 首先,您需要创建一个基础网页,html部分如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U…

    JavaScript 2023年5月27日
    00
  • JS实现字符串去重及数组去重的方法示例

    当我们需要处理字符串或者数组数据的时候,有时候我们需要去重处理。下面是JS实现字符串去重及数组去重的方法: 字符串去重 JS实现字符串去重有以下方法: 方法一:Array.from + Set 我们可以先把字符串转换成数组,然后使用ES6新增的Set数据结构去重,最后在将其转换为字符串。 const str = "aabbcc"; con…

    JavaScript 2023年5月27日
    00
  • JavaScript 乱码问题

    下面是详细的讲解“JavaScript 乱码问题”的攻略: 什么是JavaScript乱码问题? 当JavaScript文件中包含非ASCII字符时(如中文、日文、韩文等),在浏览器端可能会出现乱码的问题,这被称为JavaScript乱码问题。 产生原因 在Web开发中,当我们编写JavaScript文件时,它是以UTF-8格式保存的。但是当浏览器解析Jav…

    JavaScript 2023年5月27日
    00
  • 前端js实现文件的断点续传 后端PHP文件接收

    实现文件的断点续传需要前后端配合完成,前端使用JavaScript实现文件的分片和上传,后端使用PHP接收上传的分片并拼接成完整文件。 前端实现 文件分片 为了避免上传过大的文件造成浏览器崩溃或网络中断,前端需要将文件切分成多个小的分片进行上传。可以使用File API中的FileReader对象和Blob对象来实现,具体实现可参考以下代码: functio…

    JavaScript 2023年5月27日
    00
  • JavaScript中颜色模型的基础知识与应用详解

    JavaScript中颜色模型的基础知识与应用详解 一、颜色模型基础知识 1. RGB 颜色模型 RGB是一种颜色模型,RGB分别代表红色、绿色、蓝色三个颜色通道。在 RGB 颜色模型中,每个颜色通道的取值范围在 0-255 之间。可以通过拼接不同的 RGB 值来得到不同的颜色,如 rgb(255, 0, 0) 表示红色。 在 JavaScript 中,可以…

    JavaScript 2023年5月28日
    00
  • 解析PHP 使用curl提交json格式数据

    解析PHP使用curl提交json格式数据 什么是curl? curl是一个可用于传输数据的工具,支持多种协议,例如HTTP、FTP、SMTP等。在PHP中,我们可以使用curl向远程服务器发送HTTP请求,并获取对方的响应数据。 使用curl提交json格式数据 步骤一: 设置请求头 在使用curl向远程服务器发送请求时,我们需要设置请求头。在提交json…

    JavaScript 2023年6月11日
    00
  • JavaScript中清空数组的几种方法

    JavaScript中清空数组的几种方法 在JavaScript开发中,清空数组是一个常见的操作。本文将为大家介绍几种清空数组的方法。 使用length属性 JavaScript中的数组可以使用length属性获取数组长度,也可以通过修改length属性来清空数组。 let arr = [1, 2, 3]; arr.length = 0; console.l…

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