安卓APK文件内部结构详解:用工具解包、查看权限与资源(实战教程)
APK 看着是个“.zip”,其实是安卓应用的“集装箱”。想了解一个 App 到底要了哪些 权限、会不会偷偷联网、包里的资源长什么样——不需要任何专业背景,用几个免费小工具就能“拆开”它。 这篇文章手把手带你解包一个 APK,看懂里面的结构。
先说结论:APK 本质就是一个 ZIP 压缩包,你可以把它当成压缩文件解压(能看到大部分内容), 但真正有价值的是看懂里面的
AndroidManifest.xml(权限清单)、classes.dex(代码)、res/(资源)。下面一步步来。
一、APK 里到底有什么?关键文件速览
解包后你会看到这几个核心部分:
| 文件/目录 | 作用 | 你关心的点 |
|---|---|---|
AndroidManifest.xml | 权限与组件清单,App 的“身份证” | 它申请了哪些权限,这是安全重点 |
classes.dex | App 的程序代码(编译后的字节码) | 有没有被塞进奇怪代码(需要反编译工具看) |
res/ | 图片、布局、语言资源 | 换图标、改界面、汉化都在这 |
assets/ | 额外的打包资源(字体、视频、内置数据) | 可能藏着额外内容,值得翻翻 |
META-INF/ | 签名信息 | 判断 APK 是否被篡改的关键 |
lib/ | 各 CPU 架构(arm64-v8a 等)的底层库 | 说明 App 为哪些芯片编译 |
⚠️ 注意:原版
AndroidManifest.xml和resources.arsc是二进制格式, 直接用解压工具看是乱码,要用下面的专用工具才能“翻译”成人能读的文本。
二、工具准备:3 个免费开源工具
不需要安装一堆东西,下面按用途挑 1-2 个就够:
- apktool(Java 工具,最全能):解包 + 反编译资源 + 还原成可读的 AndroidManifest.xml。最推荐。
- jadx(Java 工具):把
classes.dex反编译成接近源码的 Java 代码,看代码逻辑用它。 - aapt2(Android SDK 自带):轻量查看 APK 的权限、包名、版本,命令行一条搞定。
三者都要装 Java(JRE)。Windows/Mac/Linux 都能用。如果你只要快速看权限,
aapt2 dump permissions一行就够,不用装太重的东西。
三、实战第 1 步:解包整个 APK
以 apktool 为例,命令行进入 APK 所在目录:
apktool d 你的应用.apk -o 输出目录执行后你会发现一个目录,里面有:
- 解码后的
AndroidManifest.xml—— 不再是乱码,直接用文本编辑器就能打开看权限。 res/—— 资源文件已经变成人类可读(图标、布局 XML、字符串都能直接看)。smali/—— 反编译出的“低层代码”(可读性差,看逻辑请用 jadx 处理 classes.dex)。
# 如果想连代码一起反编译得更彻底,用 jadx
jadx 你的应用.apk -d 输出目录jadx 会直接给你一个 sources/ 文件夹,里面是近似原始 Java 的源码,配合搜索功能 就能定位某个功能点在哪。
四、实战第 2 步:查看 App 申请了哪些权限(安全重点)
解包后打开解码的 AndroidManifest.xml,搜索 <uses-permission>,你会看到一串权限。比如:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>怎么判断正常不正常:
- 正常:一个“手电筒”要
CALL_PHONE、一个“计算器”要READ_CONTACTS—— 权限和功能严重不匹配 = 高危信号,多半有鬼。 - 合理:地图要位置、输入法要网络,这些符合预期。
- 重点警惕:
RECORD_AUDIO(录音)、READ_SMS(读短信)、SYSTEM_ALERT_WINDOW(悬浮窗)、QUERY_ALL_PACKAGES(扫描你装了啥)。
不想装工具?手机端可以直接看安装前的权限提示,或用 APKPure/APKMirror 网页版的“Permissions”栏目, 也能快速核对该 App 申请了哪些权限。
五、实战第 3 步:验证 APK 有没有被篡改(防病毒关键)
APK 里的 META-INF/ 文件夹存着签名信息。对比 APK 的签名和官方原版是否一致, 能判断你下载的文件有没有被人动过手脚。
方法 A:命令行看签名哈希
# 用 keytool 打印 APK 签名证书指纹
keytool -printcert -jarfile 你的应用.apk对比官方公布的 SHA-256 指纹即可。
方法 B:对比文件哈希(最直观)
- 在官方源(Google Play / 官方商店 / 官网)下载一个版本,记为“基准”。
- 在第三方站点下载同样的 App,用下面命令算哈希:
# macOS / Linux
shasum -a 256 你的应用.apk
# Windows PowerShell
Get-FileHash 你的应用.apk -Algorithm SHA256- 两个哈希一致 = 文件没被改过;不一致 = 被二次打包过,直接别装。
六、安全提醒:别把“会解包”用歪了
- 合法用途:安全分析、查权限、汉化/换主题(个人学习)、给不支持的应用找架构匹配版、 了解 App 是否植入了广告 SDK。
- 别做的:拿来“破解”付费 App、盗取他人代码改头换面上架、用反编译结果做灰产。学习可以,侵权违法不可取。
- 不认识的 APK 别靠解包“赌”安全:真正专业判断还需要行为监控,普通用户更稳妥的是只用可信渠道 + 官方签名对比,解包就当快速体检。
总结:APK 就是一个 ZIP,里面的 AndroidManifest.xml、classes.dex、META-INF 分别告诉你“它要啥权限、代码是啥样、有没有被改过”。用 apktool 解包 + jadx 看代码 + 哈希对比验真,三步就能把任意一个 APK 摸个底朝天。