Android之ProGuard使用

news2024/11/24 11:41:28

目录

  • 1. 启用 ProGuard
  • 2.创建 ProGuard 配置文件
  • 3.配置 ProGuard 规则
  • 4.常见的 ProGuard 规则
  • 5.构建项目
  • 6.检查混淆结果
  • 7.调试和修复问题

ProGuard 是一种代码混淆和优化工具,通常用于减小 APK 文件大小并保护源代码不被反编译。

1. 启用 ProGuard

在 Android 项目中,ProGuard 通常配置在 build.gradle 文件中。要启用 ProGuard,你需要在 buildTypes 中进行配置。

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
  • minifyEnabled true:启用代码混淆和优化。
  • proguardFiles:指定 ProGuard 配置文件。getDefaultProguardFile(‘proguard-android-optimize.txt’) 使用 Android 提供的默认配置文件,proguard-rules.pro 是你自定义的配置文件。

2.创建 ProGuard 配置文件

在项目的 app 目录下创建一个名为 proguard-rules.pro 的文件(如果它还不存在)。这个文件用于定义 ProGuard 的规则。

3.配置 ProGuard 规则

在 proguard-rules.pro 文件中,你可以添加自定义的 ProGuard 规则。例如:


# 保留所有类和类成员
-keep class com.example.app.** { *; }

# 保留所有带有特定注释的类和类成员
-keep @interface com.example.app.MyAnnotation

# 保留特定类的构造函数
-keepclassmembers class com.example.app.MyClass {
    public <init>(...);
}

# 保留所有带有自定义注释的字段和方法
-keepclassmembers class * {
    @com.example.app.MyAnnotation *;
}

# 优化代码
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# 忽略警告
-dontwarn com.example.app.**

4.常见的 ProGuard 规则

  • **保留类和类成员:**防止 ProGuard 混淆特定的类和类成员。
  -keep class com.example.app.** { *; }
  • 保留注解和反射: 防止 ProGuard 混淆使用注解和反射的代码。
  -keepattributes *Annotation*
  -keep class * implements java.lang.annotation.Annotation { *; }
  • **保留序列化类:**防止 ProGuard 混淆实现 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();
  }

5.构建项目

配置完成后,使用以下命令构建项目的 release 版本:

./gradlew assembleRelease

debug版本命令

./gradlew assembleDebug

ProGuard 会在构建过程中自动运行,并生成优化和混淆后的 APK 文件。
在这里插入图片描述

6.检查混淆结果

ProGuard 会生成一个映射文件(mapping file),用于将混淆后的代码映射回原始代码。这个文件通常位于

app/build/outputs/mapping/release/mapping.txt。

7.调试和修复问题

如果在启用 ProGuard 后遇到问题,可以通过以下步骤进行调试和修复:

  • 检查日志:查看构建日志和运行时日志,找出混淆导致的问题。
  • 调整 ProGuard 规则:根据日志信息,调整 proguard-rules.pro 文件中的规则,保留特定的类和类成员。

Android之APK 瘦身

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 3.x 必修课|011|组件属性:提高代码复用性和可维护性(必读+实操)

欢迎关注公众号:CodeFit。 你还没有订阅吗?快动动你的手指,点击订阅《Vue 3.x 必修课| 2024》:http://t.csdnimg.cn/hHRrM,目前持续更新中~🚀🚀🚀 精品内容🥇🥇🥇,物超所值🔥🔥🔥(9.9 元!20+篇内容!)。 Vue3 作为现代前端框架的佼佼者,其组件系…

“想提高网站排名?前端代码优化就是关键!“(SEO)

什么是SEO 搜索引擎优化&#xff08;Search engine optimization&#xff0c;简称SEO&#xff09;&#xff0c;指为了提升网页在搜索引擎自然搜索结果中&#xff08;非商业性推广结果&#xff09;的收录数量以及排序位置而做的优化行为&#xff0c;是为了从搜索引擎中获得更多的…

2024年,最新前端趋势

随着技术的不断发展&#xff0c;前端开发领域在2024年迎来了新的趋势和挑战。对于开发者来说&#xff0c;紧跟这些趋势不仅能提升技术水平&#xff0c;还能在激烈的市场竞争中脱颖而出。今天&#xff0c;我想向大家介绍一款在这波趋势中脱颖而出的开发神器——MemFire Cloud。这…

【视频讲解】滚动回归Rolling Regression、ARIMAX时间序列预测Python、R实现应用

原文链接&#xff1a; https://tecdat.cn/?p37338 原文出处&#xff1a;拓端数据部落公众号 分析师&#xff1a;Jixin Zhong 本文将通过视频讲解&#xff0c;展示如何用滚动回归预测&#xff0c;并结合一个R语言多元时间序列滚动预测&#xff1a;ARIMA、回归、ARIMAX模型分…

Unity游戏开发

Unity游戏开发 系列文章的目录&#xff1a; 第一章&#xff1a;Hello&#xff0c;Unity&#xff01; “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发前言今天我们来体验一下unity开发创建第一…

树莓派neo4j在noe4j中将csv文件添加节点

参考前序教程&#xff1a;Raspberry Pi上使用pip来安装py2neo&#xff0c;pip install py2neoerror: externally-managed-environment-CSDN博客 再次进入时 激活虚拟环境&#xff1a; 进入您创建的虚拟环境目录&#xff1a; cd venv然后激活环境&#xff1a; source bin/activa…

【学习笔记】Day 12

一、进度概述 1、《地震勘探原理》第五章 二、详情 个人感觉第五&#xff0c;六&#xff0c;八章的解释更倾向于地质学那边负责的&#xff0c;但是多了解相关原理&#xff0c;肯定是有利于 DL-FWI 的相关研究的&#xff0c;所以这里只是做一个粗略的归纳&#xff0c;相关内容详…

原来这就是KEEPALIVED(高可用集群大讲解)

keepalived可用来解决haproxy挂掉后集群无法使用的问题 一.高可用集群 1.1 集群类型 LB&#xff1a;Load Balance 负载均衡 &#xff08;lvs和haproxy解决的&#xff09; LVS/HAProxy/nginx&#xff08;http/upstream, stream/upstream&#xff09; HA&#xff1a;High Av…

LTspice 仿真电容阻抗频率特性曲线

一、仿真原理图如图所示&#xff0c;有一个电压源和10uf的电容C1。 二、信号源参数&#xff1a; 三、电容参数&#xff0c;其中包含了耐压值6.3V&#xff0c;ESR,ESL。 四、执行参数为 .ac dec 1000 1 1000Meg&#xff0c;扫频模式。 五、开始仿真&#xff0c;然后设置曲线为下…

【网盘源码】百度云盘手动cookie获取,添加到扫码系统管理平台v3.0版本。

大家好&#xff0c;今天来给大家介绍如何购买适合自己的网盘系统&#xff01; 角色定位 技术小白 特点&#xff1a; 对技术了解有限&#xff0c;想快速搭建网盘平台。 目的&#xff1a; 单一卖自己的网盘业务&#xff0c;不想投入太多精力在技术维护上。 推荐&#xff1a; 租赁…

基于 Fluent 和深度学习算法驱动的流体力学计算与应用

在深度学习与流体力学融合的背景下&#xff0c;科研边界不断拓展&#xff0c;创新成果层出不穷。从物理模型融合到复杂流动模拟&#xff0c;从数据驱动研究到流场智能分析&#xff0c;深度学习正以前所未有的力量重塑流体力学领域。 目前在 Nature和Science杂志上发表的深度学…

【C++】多源BFS问题和拓扑排序

目录 多源BFS介绍 单源BFS和多源BFS的区别 SO如何解决多源BFS问题 多源之核心 矩阵 算法思路 代码实现 飞地的数量 算法思路 代码实现 地图中的最高点 算法思路 代码实现 地图分析 算法思路 代码实现 拓扑排序介绍 有向无环图 ​编辑 如何解决这类问题 课…

【基础解读】神奇宝贝多分类——Logistic Classification

Classification的三步走 交叉熵损失函数 逻辑回归与线性回归的三步走对比 CE和SE对比 Discriminative与Generative对比 多分类问题 逻辑回顾的限制 特征转换

OneAPI配置自己的令牌并实现python调用

1、登录OneAPI账户&#xff08;初始账户密码为 账号&#xff1a;root 密码&#xff1a;123456&#xff09; 2、第一次登录会提示修改密码 3、点击网页渠道 可以配置自己大模型的渠道 4、OneAPI支持多家厂商进行渠道配置&#xff0c;选择不同厂商就可以调用对应大模型 5、渠…

基于Linux对 【进程地址空间】的详细讲解

研究背景&#xff1a; ● kernel 2.6.32 ● 32位平台 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀– 在学习操作系统中想必大家肯定都见过下面这…

如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧

在企业运营中&#xff0c;保护公司的机密信息至关重要。员工私自拷贝公司内部文件不仅可能导致商业秘密泄露&#xff0c;还可能损害公司的声誉和经济利益。下面我们将介绍一些有效的方法来防止这种情况的发生&#xff0c;并以“安企神”软件为例进行详细说明。 1. 明确规章制度…

怎么调试python脚本

打开pycharm community 2019.1软件&#xff0c;创建一个项目。 创建一个py后缀的文件作为示范&#xff0c;文件名自己定义。 编写代码&#xff0c;然后右键点击进行运行&#xff0c;查看一下是否有问题。 点击右上角的虫子图标&#xff0c;然后下面会有控制面板出来&#xff0c…

财务会计与管理会计(四)

文章目录 月度数据统计分析OFFSET函数在图表分析中的应用 多种费用组合分析图SUMPRODUCT函数 省公司全年数据分析模板INDIRECT、OFFSET函数 多公司分季度数据筛选VLOOKUP、IFERROR函数的应用 淘宝后台数据分析OFFSET函数在跨表取数中的应用 燃气消耗台账数据统计分析图SUMPRODU…

进程的结束

回顾上节&#xff1a; 父子进程的关系 子进程是父进程的副本 子进程获得父进程的数据段&#xff0c;堆&#xff0c;栈&#xff0c;正文段共享 在fork之后&#xff0c;一般情况下那个会先运行是不确定的&#xff0c;取决于操作系统 练习&#xff1a; 用进程实现文件拷贝 …

某家用智能路由权限绕过

You can’t improve your past, but you can improve your future. 你无法改变过去&#xff0c;但你可以让未来变得更美好。 漏洞描述 某家用智能路由存在权限绕过&#xff0c;通过Drop特定的请求包访问未授权的管理员页面 漏洞实战 访问漏洞url http://x.x.x/index.html…