APK Downloader
返回博客列表
APK安卓解包apktool权限Android

安卓APK文件内部结构详解:用工具解包、查看权限与资源(实战教程)

·9 min read

APK 看着是个“.zip”,其实是安卓应用的“集装箱”。想了解一个 App 到底要了哪些 权限、会不会偷偷联网、包里的资源长什么样——不需要任何专业背景,用几个免费小工具就能“拆开”它。 这篇文章手把手带你解包一个 APK,看懂里面的结构。

先说结论:APK 本质就是一个 ZIP 压缩包,你可以把它当成压缩文件解压(能看到大部分内容), 但真正有价值的是看懂里面的 AndroidManifest.xml(权限清单)、classes.dex(代码)、res/(资源)。下面一步步来。

一、APK 里到底有什么?关键文件速览

解包后你会看到这几个核心部分:

文件/目录作用你关心的点
AndroidManifest.xml权限与组件清单,App 的“身份证”它申请了哪些权限,这是安全重点
classes.dexApp 的程序代码(编译后的字节码)有没有被塞进奇怪代码(需要反编译工具看)
res/图片、布局、语言资源换图标、改界面、汉化都在这
assets/额外的打包资源(字体、视频、内置数据)可能藏着额外内容,值得翻翻
META-INF/签名信息判断 APK 是否被篡改的关键
lib/各 CPU 架构(arm64-v8a 等)的底层库说明 App 为哪些芯片编译

⚠️ 注意:原版 AndroidManifest.xmlresources.arsc二进制格式, 直接用解压工具看是乱码,要用下面的专用工具才能“翻译”成人能读的文本。

二、工具准备:3 个免费开源工具

不需要安装一堆东西,下面按用途挑 1-2 个就够:

  1. apktool(Java 工具,最全能):解包 + 反编译资源 + 还原成可读的 AndroidManifest.xml。最推荐。
  2. jadx(Java 工具):把 classes.dex 反编译成接近源码的 Java 代码,看代码逻辑用它。
  3. 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:对比文件哈希(最直观)

  1. 在官方源(Google Play / 官方商店 / 官网)下载一个版本,记为“基准”。
  2. 在第三方站点下载同样的 App,用下面命令算哈希:
# macOS / Linux
shasum -a 256 你的应用.apk
# Windows PowerShell
Get-FileHash 你的应用.apk -Algorithm SHA256
  1. 两个哈希一致 = 文件没被改过;不一致 = 被二次打包过,直接别装。

六、安全提醒:别把“会解包”用歪了

  • 合法用途:安全分析、查权限、汉化/换主题(个人学习)、给不支持的应用找架构匹配版、 了解 App 是否植入了广告 SDK。
  • 别做的:拿来“破解”付费 App、盗取他人代码改头换面上架、用反编译结果做灰产。学习可以,侵权违法不可取。
  • 不认识的 APK 别靠解包“赌”安全:真正专业判断还需要行为监控,普通用户更稳妥的是只用可信渠道 + 官方签名对比,解包就当快速体检。

总结:APK 就是一个 ZIP,里面的 AndroidManifest.xmlclasses.dexMETA-INF 分别告诉你“它要啥权限、代码是啥样、有没有被改过”。用 apktool 解包 + jadx 看代码 + 哈希对比验真,三步就能把任意一个 APK 摸个底朝天。