news 2026/7/7 10:24:27

【安卓逆向】APK和APP结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【安卓逆向】APK和APP结构

文章目录

    • 1. APK包文件结构
      • 1.1. 结构目录
      • 1.2. AndroidManifest.xml
      • 1.3. classes.dex
      • 1.4. assets/(资产目录,未编译)
      • 1.5. lib/(so文件)
      • 1.6. res/(资源目录,编译)
      • 1.7. resources.arsc(资源文件索引)
      • 1.8. META-INF/(签名目录)
    • 2. APP代码结构
    • 3. APP简单启动顺序
      • 3.1. Application 阶段
      • 3.2. 开屏界面 Activity(SplashActivity)
      • 3.3. Main Activity(主界面)

1. APK包文件结构

1.1. 结构目录

app.apk ├── AndroidManifest.xml # 清单文件(二进制格式) ├── classes.dex # DEX 字节码文件 ├── classes2.dex # 多 DEX 文件(可选) ├── resources.arsc # 资源索引表 ├── META-INF/ # 签名信息目录 │ ├── MANIFEST.MF # 清单摘要文件 │ ├── CERT.SF # 签名摘要文件 │ └── CERT.RSA # 签名证书文件 ├── res/ # 资源文件目录 │ ├── drawable/ # 图片资源 │ ├── layout/ # 布局文件 │ ├── mipmap/ # 应用图标 │ ├── values/ # 字符串、颜色等 │ └── raw/ # 原始资源文件 ├── assets/ # 原始资源(不压缩) ├── lib/ # Native 库目录 │ ├── armeabi-v7a/ # 32 位 ARM 库 │ ├── arm64-v8a/ # 64 位 ARM 库 │ ├── x86/ # 32 位 x86 库 │ └── x86_64/ # 64 位 x86 库 └── unknown/ # 其他文件(可选)

1.2. AndroidManifest.xml

属性说明
格式二进制 XML(AAPT 编译后)
内容包名、权限、四大组件(Activity/Service/Receiver/Provider)、SDK 版本等
查看需用apktool djadx反编译
作用重要配置文件,APP启动入口,界面信息等等

1.3. classes.dex

属性说明
格式Dalvik Executable(DEX 字节码)
内容所有 Java/Kotlin 代码编译后的字节码
多 DEX当代码超过 65536 个方法时,会生成classes2.dexclasses3.dex
查看可用jadxdex2jar反编译

1.4. assets/(资产目录,未编译)

属性说明
特点不压缩,保持原始文件格式
内容HTML、字体、数据库、配置文件等
访问通过AssetManager访问,无资源 ID

1.5. lib/(so文件)

架构说明
armeabi-v7a32 位 ARM(支持大多数 Android 设备)
arm64-v8a64 位 ARM(主流设备)
x8632 位 x86(模拟器)
x86_6464 位 x86(模拟器)
armeabi旧版 ARM(已弃用)
mipsMIPS 架构(已弃用)

1.6. res/(资源目录,编译)

目录作用
drawable/图片资源(PNG/JPG/Vector)
drawable-ldpi/mdpi/hdpi/xhdpi/不同密度的图片资源
layout/布局文件(XML)
mipmap/应用图标(启动器专用)
values/颜色、字符串、尺寸等
values-zh/values-en/多语言资源
anim/动画资源
raw/原始文件(不编译)
xml/其他 XML 配置文件

1.7. resources.arsc(资源文件索引)

属性说明
格式二进制资源索引表
内容所有资源的 ID 和对应的路径映射
作用系统通过资源 ID(如R.id.xxx)快速查找资源

1.8. META-INF/(签名目录)

MANIFEST.MF包含所有文件的 SHA1 摘要
CERT.SFMANIFEST.MF 的摘要 + 每个文件的摘要
CERT.RSA签名证书(包含公钥和证书链)
CERT签名证书(可能命名为其他名称)

2. APP代码结构

┌─────────────────────────────────────────────────────────────┐ │ APP 代码结构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 业务模块 │ │ │ │ 首页 / 登录 / 个人中心 / 商品 / 订单 / 购物车 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 系统模块 │ │ │ │ com.android.* (Activity / Service / 权限 / 通知) │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 第三方模块 │ │ │ │ 网络请求(OkHttp) / 支付(Pay) / 推送(Umeng) / │ │ │ │ 图片加载(Glide) / 统计 / 地图 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

3. APP简单启动顺序

┌─────────────────────────────────────────────────────────────────┐ │ APP 启动流程 │ └─────────────────────────────────────────────────────────────────┘ 用户点击 APP 图标 │ ▼ ┌─────────────────────────────────────┐ │ 1. 执行 Application │ │ ├── attach() │ │ └── onCreate() │ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 2. 执行开屏界面 Activity │ │ (SplashActivity) │ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 3. 执行 Main Activity │ │ └── onCreate() │ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 4. 启动成功 ✅ │ └─────────────────────────────────────┘

3.1. Application 阶段

publicclassMyApplicationextendsApplication{// 系统调用时机:Application 创建时(最先执行)@OverridepublicvoidonCreate(){super.onCreate();// 初始化操作:// - 第三方 SDK 初始化(OkHttp、推送、统计等)// - 全局配置加载// - 异常捕获设置}}

3.2. 开屏界面 Activity(SplashActivity)

publicclassSplashActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);// 显示开屏画面// 加载广告/缓冲数据// 延迟跳转 MainActivity}}

3.3. Main Activity(主界面)

publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);// 加载主界面布局// 初始化 Fragment / ViewPager// 加载数据// 启动成功!}}

感谢关注【遇事不決洛必達】!欢迎点赞收藏和交流指正,我会持续分享我的学习经验和心得。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 10:23:37

基于TC78H651AFNG与PIC18F86J55的直流电机驱动方案

1. 项目背景与核心器件选型在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便等优势,仍然占据重要地位。TC78H651AFNG作为东芝新一代H桥驱动器,与Microchip的PIC18F86J55微控制器组合,构成了一个高性能的电机驱动解…

作者头像 李华
网站建设 2026/7/7 10:18:47

【三方库】ohos_mqtt v2.0.29 鸿蒙平台稳定性与质量提升

📢 【三方库】ohos_mqtt v2.0.29 鸿蒙平台稳定性与质量提升 ohos_mqtt v2.0.29 已发布。本次升级聚焦该库稳定性与质量提升,修复已知 UAF 与回调稳定性问题,兼容升级,开发者无需修改现有代码即可享受本次改进。推荐所有该库用户升…

作者头像 李华
网站建设 2026/7/7 10:18:09

ClickHouse 分布式表设计指南:分片键选错,查询会慢成什么样

ClickHouse 分布式表设计指南:分片键选错,查询会慢成什么样 一、一个分片键选择失误,集群从 3 秒退化到 30 秒 ClickHouse 分布式表的威力在于把一张逻辑表拆到多个物理节点上,查询时并行扫描、写入时分片路由。但这些都依赖一个核…

作者头像 李华
网站建设 2026/7/7 10:17:18

D3-MoE:双解耦扩散混合专家实现可控自动驾驶轨迹规划

1. 项目概述:这不是又一个“端到端黑箱”,而是一次对自动驾驶决策底层逻辑的重新锚定“D3-MoE:双解耦扩散混合专家实现可控自动驾驶轨迹规划”——这个标题里没有一个词是虚的,每个术语都直指当前自动驾驶落地中最硬的几块骨头。我…

作者头像 李华
网站建设 2026/7/7 10:11:57

Navicat for Mac终极破解指南:3种方法彻底解除14天试用限制

Navicat for Mac终极破解指南:3种方法彻底解除14天试用限制 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为…

作者头像 李华
网站建设 2026/7/7 10:10:51

体制内写材料不再头疼:讯飞星火「政务文档专家」使用体验

title: 体制内写材料不再头疼:讯飞星火「政务文档专家」使用体验 date: 2026-06-27 categories: AI办公 tags: [讯飞星火, 政务文档, 公文写作, AI办公] 写公文,难在规范 体制内的人都知道:公文写作最难的不是"写什么"&#xff0…

作者头像 李华