当前位置: 首页 > news >正文

Android apkanalyzer简介

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、用法
    • 3.1 使用 Android Studio
      • 3.1.1 查看文件和大小信息
      • 3.1.2 查看 AndroidManifest.xml
      • 3.1.3 查看 DEX 文件
      • 3.1.4 过滤 DEX 文件树状视图
      • 3.1.5 加载 ProGuard 映射
      • 3.1.6 显示字节码、查找用法以及生成 Keep 规则
      • 3.1.7 查看代码和资源实体
      • 3.1.8 比较文件
    • 3.2 使用 命令行
  • 四、 推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习基础知识,温故知新。

apkanalyzer 用于分析我们生成的apk,可以得到各种我们想要的信息,
例如分析 APK 文件属性,如应用 ID、版本代码和版本名称,查看文本、图像和字符串资源等等。
常用的如:

apkanalyzer apk summary xxx.apk 输出应用 ID、版本代码和版本名称。 eg: com.myapp  5   1.1-beta

二、概览

通过 APK 分析器的命令行版本,您可以在构建流程完成后立即了解 APK 的组成,并且可以比较两个 APK 之间的差异。
使用 APK 分析器可以减少调试应用中的 DEX 文件和资源相关问题所花费的时间,并减小 APK 的大小。

apkanalyzer 包含在 Android SDK 命令行工具软件包中(位于 android_sdk/cmdline-tools/version/bin/apkanalyzer)。
或者,您也可以在 Android Studio 中访问 APK 分析器工具,如使用 APK 分析器来分析您的 build 中所述。

三、用法

Android Studio 包含一个 APK 分析器,可让您在构建流程完成后立即了解 APK 或 Android App Bundle 文件的组成。
使用 APK 分析器可以减少调试应用的 DEX 文件和资源相关问题所用的时间,并且有助于减小 APK 的大小。
您也可以使用 apkanalyzer 从命令行运行 APK 分析器。

下面我们分部讲解一下.

3.1 使用 Android Studio

可以通过以下三种方式访问 APK 分析器:

  • 将 APK 或 app bundle 拖到 Android Studio 的 Editor 窗口中。
  • 在 Project 窗口中切换到 Project 视图,然后在默认的 build/output/apks/ 目录中双击相应 APK。
  • 在菜单栏中依次选择 Build > Analyze APK,然后选择您的 APK 或 app bundle。

打开后就可以直接查看相关信息了,这一步是傻瓜式的操作了。

通过 apkanalyzer,我们可以:

3.1.1 查看文件和大小信息

3.1.2 查看 AndroidManifest.xml

3.1.3 查看 DEX 文件

3.1.4 过滤 DEX 文件树状视图

3.1.5 加载 ProGuard 映射

3.1.6 显示字节码、查找用法以及生成 Keep 规则

这个我们讲一下,使用方式为先选定一个dex文件,然后在下面展示类的窗口中选择一个类,然后点击右键即可。

  • Show bytecode
    对选定的类、方法或字段进行反编译,并在对话框中显示 smali 字节码表示形式

  • Find usages
    显示 DEX 代码的哪些其他部分对选定的类或方法进行了引用,如果加载了 seeds.txt,以粗体显示的节点表示 ProGuard 配置阻止在压缩过程中移除这些节点。

  • Generate Proguard Keep rule
    生成 Keep 规则,大白话就是如果你不想混淆这个类,使用该选择之间生成keep规则即可。

3.1.7 查看代码和资源实体

3.1.8 比较文件

apkanalyzer

3.2 使用 命令行

apkanalyzer 的语法为:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
  • global-options: 这里我们常用的有 -h ,简单易懂的格式(-h 选项)
  • subject :要查询的内容,常用的有 apk, files, manifest, dex, resources
  • verb :要了解的关于 subject 的内容
apkanalyzer -h apk verb [options] apk-file [apk-file2]
apkanalyzer -h files verb [options] apk-file [apk-file2]
apkanalyzer -h manifest verb [options] apk-file [apk-file2]
apkanalyzer -h dex verb [options] apk-file [apk-file2]
apkanalyzer -h resources verb [options] apk-file [apk-file2]-h 可要可不要

我们列一下常用命令

查看 APK 文件属性说明
apkanalyzer apk summary xxx.apk输出应用 ID、版本代码和版本名称。 eg: com.myapp 5 1.1-beta
apkanalyzer apk file-size xxx.apk输出 APK 的总文件大小
apkanalyzer apk download-size xxx.apk输出 APK 的下载大小估计值
apkanalyzer apk features xxx.apk输出 APK 用来触发 Play 商店过滤的功能
apkanalyzer apk features --not-required xxx.apk输出 APK 用来触发 Play 商店过滤的功能。添加 --not-required 选项可在输出中包含标记为“非必需”的功能
apkanalyzer apk compare xxx1.apk xxx2.apk比较 apk-file 和 apk-file2 的大小。输出示例(旧大小/新大小/大小差异/路径)
apkanalyzer apk compare --different-only xxx1.apk xxx2.apk比较 apk-file 和 apk-file2 的大小,输出存在差异的目录和文件
apkanalyzer apk compare --files-only xxx1.apk xxx2.apk比较 apk-file 和 apk-file2 的大小。不输出目录条目
apkanalyzer apk compare --patch-size xxx1.apk xxx2.apk比较 apk-file 和 apk-file2 的大小。逐个显示每个文件的补丁大小估计值,而不是原始差异
查看 APK 文件系统说明
apkanalyzer files list xxx.apk列出 APK 中的所有文件
apkanalyzer files cat --file path xxx.apk输出文件内容。您必须使用 --file path 选项(如 --file /AndroidManifest.xml)指定 APK 内的路径。
查看清单中的信息说明
apkanalyzer manifest print xxx.apk以 XML 格式输出 APK 清单。
apkanalyzer manifest application-id xxx.apk输出应用 ID 值。
apkanalyzer manifest version-name xxx.apk输出版本名称值。
apkanalyzer manifest version-code xxx.apk输出版本代码值。
apkanalyzer manifest min-sdk xxx.apk输出最低 SDK 版本。
apkanalyzer manifest target-sdk xxx.apk输出目标 SDK 版本。
apkanalyzer manifest permissions xxx.apk输出权限列表
apkanalyzer manifest debuggable xxx.apk输出应用是否可调试。
查看清单中的信息说明
dex list apk-file输出 APK 中的 DEX 文件列表。
dex references [–files path] [–files path2] apk-file输出指定 DEX 文件中的方法引用数。 默认包含所有 DEX 文件。添加 --files 选项可指明要包含的特定文件。 输出示例:classes.dex 59598
dex packages [option1 option2 …] apk-file输出 DEX 中的类树。在输出中,P、C、M 和 F 分别表示软件包、类、方法和字段。x、k、r 和 d 分别表示已移除、保留、引用和定义的节点。
dex code --class class [–method method]以 smali 格式输出类或方法的字节码。输出中必须包含类名,并且要输出完全限定类名以进行反编译。添加 --method 选项可指定要反编译的方法。方法反编译的格式为 name(params)returnType,例如 someMethod(Ljava/lang/String;I)V。
packages 添加以下选项可优化输出:--defined-only:在输出中仅包含 APK 中定义的类。
--files:指定要包含的 DEX 文件名。默认:所有 DEX 文件。
--proguard-folder file:指定用于搜索映射的 Proguard 输出文件夹。
--proguard-mappings file:指定 Proguard 映射文件。
--proguard-seeds file:指定 Proguard 种子文件。
--proguard-usages file:指定 Proguard 用法文件。
--show-removed:显示由 Proguard 移除的类和成员。
输出示例(类型/状态/定义的方法/引用的方法/字节大小/名称):P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()
查看存储在 res/ 和 resources.arsc 中的资源说明
resources packages输出资源表中定义的软件包列表。
resources configs --type type [–package package] apk-file输出指定 type 的配置列表。 type 是资源类型,如 string。 如果要指定资源表软件包名称,请添加 --package 选项,否则系统将使用第一个定义的软件包。
resources value --config config --name name --type type [–package package] apk-file输出由 config、name 和 type 指定的资源的值。type 选项是资源类型,如 string。如果要指定资源表软件包名称,请添加 --package 选项,否则系统将使用第一个定义的软件包。
resources names --config config --type type [–package package] apk-file输出属于某个配置和类型的资源名称列表。type 选项是资源类型,如 string。 如果要指定资源表软件包名称,请添加 --package 选项,否则系统将使用第一个定义的软件包。
resources xml --file path apk-file以简单易懂的形式输出 XML 二进制文件。 添加 file 选项可指定文件的路径。

apkanalyzer

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

相关文章:

Android apkanalyzer简介

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、用法3.1 使用 Android Studio3.1.1…...

PJSIP 2.7.2对G.729的支持,编译bcg729步骤

PJSIP 2.7.2对G.729的支持,编译bcg729步骤 下载BCG729源码升级cmake编译BCG729编译pjsip2.7.2 pjsua测试 下载BCG729源码 git clone git://git.linphone.org/bcg729.git升级cmake 注:编译BCG729要求cmake版本大于3.0,如果版本已经达到要求&…...

(二)Python类型总结

Python 是一种面向对象的语言。这意味着在 Python 中,一切都是对象,包括变量、函数和模块。Python 支持类和对象的概念,通过定义类来创建对象,并使用对象的方法和属性来操作数据。 Python 与 Java 和 C 在数据类型方面有一些相似…...

pojo之vo_dto_po的一些理解

一次扫盲VO、DTO、DO和PO区别、用法、概念~-腾讯云开发者社区-腾讯云 (tencent.com) Java学习笔记——实体类(ENTITY,VO,DTO,BO)_dto继承entity_路言汐的博客-CSDN博客 说清楚PO、DTO、VO、BO与使用场景_业务逻辑层p…...

Leetcode 第 364 场周赛题解

Leetcode 第 364 场周赛题解 Leetcode 第 364 场周赛题解题目1:2864. 最大二进制奇数思路代码复杂度分析 题目2:美丽塔 I思路代码复杂度分析 题目3:美丽塔 II思路代码复杂度分析 题目4:统计树中的合法路径数目思路代码复杂度分析 …...

简单单调栈的运用,悬线法---最大子矩阵,整除分块(规律+分块边界)

简单单调栈的运用 牛客一站到底 最优屏障 题意&#xff1a;有n座山&#xff0c;高度位ai,山上的士兵能相互监督当且仅当max(ai1...aj-1)<min(ai,aj) M国的防守能力大小为相互监视的哨兵对数,H国家可以放一块巨大屏障在某山前&#xff0c;以便最大消弱M方式能力 计算最优的屏…...

华为OD 数组求和(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

Go语言入门心法(十):Go语言操作MYSQL(CRUD)|事务处理

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…...

【鸿蒙软件开发】进度条Progress

文章目录 前言一、进度条Progress1.1 创建进度条1.2 进度条样式进度条样式ProgressType.Linear&#xff08;线性样式&#xff09;ProgressType.Ring&#xff08;环形无刻度样式&#xff09;ProgressType.ScaleRing&#xff08;环形有刻度样式&#xff09;ProgressType.Eclipse&…...

Java后端开发(九)-- idea(2022版)将commit(未push)的 本地仓库 的 多条commit记录 进行撤销

目录 1.多次 修改Test01类后,提交到本地仓库 。 2.多次重复 1 的步骤,多次commit成功后,在Git =》Log中会显示,commit记录...

【蓝桥每日一题]-动态规划 (保姆级教程 篇10)#方格取数

高能预警&#xff1a;讲了这么久动态规划了&#xff0c;该上点有难度的题吧 目录 题目&#xff1a;方格取数 思路&#xff08;解法一&#xff09;&#xff1a; 解法二&#xff1a; 题目&#xff1a;方格取数 思路&#xff08;解法一&#xff09;&#xff1a; 如果只有两个方向…...

Git GUI工具:SourceTree代码管理

Git GUI工具&#xff1a;SourceTree SourceTreeSourceTree的安装SourceTree的使用 总结 SourceTree 当我们对Git的提交、分支已经非常熟悉&#xff0c;可以熟练使用命令操作Git后&#xff0c;再使用GUI工具&#xff0c;就可以更高效。 Git有很多图形界面工具&#xff0c;这里…...

4 OpenCV实现多目三维重建(多张图片增量式生成稀疏点云)【附源码】

本文是基于 OpenCV4.80 进行的&#xff0c;关于环境的配置可能之后会单独说&#xff0c;先提一嘴 vcpkg 真好用 1 大致流程 从多张图片逐步生成稀疏点云&#xff0c;这个过程通常包括以下步骤&#xff1a; 初始重建&#xff1a; 初始两张图片的选择十分重要&#xff0c;这是整…...

【Java基础面试三十九】、 finally是无条件执行的吗?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; finally是无条件执行的…...

【讲座笔记】基于 Apache Calcite 的多引擎指标管理最佳实践|CommunityOverCode Asia 2023 | 字节开源

引言 三个问题 (问题解法) 1套SQL 2种语法 统一SQL的实践案例 虚拟列的实践案例 SQL Define Function 指标管理的实现 在这里插入图片描述...

蓝桥杯 (猜生日、棋盘放麦子、MP3储存 C++)

思路&#xff1a; 1、用循环。 2、满足条件&#xff0c;能整除2012、3、12且month等于6、day<30 #include<iostream> using namespace std; int main() {for (int i 19000101; i < 20120312; i){int month i / 100 % 100;int day i % 100;if (i % 2012 0 &…...

求 k 整除最大元素和(dp)

Description 给你一个整数数组&#xff0c;请你在其中选取若干个元素&#xff0c; 使得其和值能被 k 整除&#xff0c;输出和值最大的那个和值。 最后的数字可能很大&#xff0c;所以结果需要对 19260817 取模。 Input 第一行是两个正整数 n&#xff0c;k&#xff1a;表示数…...

代码随想录Day24 LeetCode T491 递增子序列 LeetCode T46 全排列 LrrtCode T47 全排列II

LeetCode T491 递增子序列 题目链接:491. 递增子序列 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 首先这里的测试用例很容易误导我们,这道题不能使用上次子集的思路对数组先排序,使用一个used数组来解决问题. 我们用[4,7,6,7]举例这道题的递增序列不存在[4,6,7,7]这个…...

【六:(mock数据)spring boot+mybatis+yml】

目录 1.1、代码编写Demo类User类启动类 APplication 1.2、配置类查询语句的配置 mysql.ymlspringboot的配置 application.yml日志的配置 logback.xml数据库的配置 mybatis-config.xml 1.3、测试&#xff1a;1.3.1、测试获取用户数1.3.2、添加用户1.3.3、数据的更新1.3.4、数据的…...

51单片机KeyWard

eg1&#xff1a; 单片机键盘的分类 键盘分为编码键盘和非编码键盘&#xff0c;键盘上闭合键的识别由专用的硬件编码器实现&#xff0c;并产生键编码号或键值得称为编码键盘&#xff0c;如计算机键盘&#xff0c;而靠软件来识别的称为非编码键盘&#xff0c;在单片机组成的各种…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...