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

下面是关于“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的变量和数据类型

    当我们在编写JavaScript程序时,变量和数据类型是经常需要用到的概念,下面就来详细讲解一下。 基本概念 变量 变量是用来存储数据的容器,可以通过使用变量名来引用这些数据。JavaScript中的变量声明可以使用 var、let、const 等关键字来完成,其中 var 关键字是早期版本的语法,let 和 const 关键字是ES6中新增的。 数据类型 …

    JavaScript 2023年5月28日
    00
  • java实现猜数字游戏

    接下来我将为您详细讲解“Java实现猜数字游戏”的完整攻略。 步骤一:创建项目并编写代码 首先,我们要创建一个Java项目,并在其中创建一个名为GuessNumber的类。代码如下所示: import java.util.Random; import java.util.Scanner; public class GuessNumber { public s…

    JavaScript 2023年6月11日
    00
  • JavaScript中使用自然对数ln的方法

    在JavaScript中,计算自然对数ln的方法有多种。本文将介绍两种常见的方法:使用Math库和手动计算。 使用Math库 Math库是JavaScript标准库之一,其中包括了常用的数学函数,如cos、sin、log等。其中包括了计算自然对数ln的函数:Math.log()。 使用Math.log()函数的方法非常简单,直接传入需要计算自然对数的数值即可…

    JavaScript 2023年5月27日
    00
  • JS实现的多张图片轮流播放幻灯片效果

    下面是 JS 实现多张图片轮流播放幻灯片效果的完整攻略: 确定需求 在实现多张图片轮流播放幻灯片效果前,我们需要明确一些需求: 显示多张图片:需要将多张图片放在同一个容器中,用于轮流播放; 轮流播放图片:需要编写 JS 代码实现轮流播放多张图片的逻辑; 显示切换控制按钮:为了方便用户手动控制图片切换,可以添加切换控制按钮; 自动轮播:为了提升用户体验,可以设…

    JavaScript 2023年5月28日
    00
  • JS编程小常识很有用

    JS编程小常识是指在JavaScript编程中,常用到的一些小技巧和注意事项。这些小常识可以帮助开发者以更高效、安全、健壮的方式编写JavaScript代码。下面是一个完整的攻略,包括示例说明 1. 变量声明 使用const和let来声明变量,而不是使用var。 使用const对于不会被重新赋值的变量,使用let对于可能被重新赋值的变量。 不要使用全局变量,…

    JavaScript 2023年6月10日
    00
  • JS实现回到页面顶部动画效果的简单实例

    下面我将为你详细讲解“JS实现回到页面顶部动画效果的简单实例”的完整攻略。 步骤1:HTML结构 首先,在页面中需要添加一个回到顶部的按钮。在 HTML 中添加一个 button 元素,并为其添加一个 id 属性,以方便在 JS 中使用。 <button id="backToTopBtn">回到顶部</button&gt…

    JavaScript 2023年6月10日
    00
  • js关于精确计算和数值格式化以及直接引js文件

    JavaScript是一种基于浮点数的编程语言,在处理整数和小数时可能会出现精度问题。因此,正确的数值计算和格式化对于JavaScript是非常重要的。在本攻略中,我们将讨论JS中的精确计算和数值格式化,并展示如何引用外部JS文件。 精确计算 在JS中,对于小数计算,我们一般使用toFixed()函数进行保留位数的操作。但是,toFixed()函数在计算时可…

    JavaScript 2023年5月27日
    00
  • JavaScript 开发规范要求(图文并茂)

    JavaScript开发规范要求(图文并茂) 简介 JavaScript是一门非常灵活的语言,灵活性也为其带来了使用难度,所以为了保证代码的品质和可维护性,一些好的JavaScript开发规范是必不可少的。 为此,本文将详细介绍旨在提高JavaScript代码品质和可维护性的开发规范要求。 代码组织 引入顺序 首先,我们应该根据引入类型将脚本分成3个部分: …

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