Android历史版本与APK文件结构
前言
在移动设备日益普及的今天,Android系统已经成为全球最流行的移动操作系统。作为Android开发者或逆向工程师,了解Android系统的演进历史以及APK文件的基本结构是非常重要的。本文将详细介绍Android历史版本的演变以及APK的基本结构。
一、Android历史版本
1.1 Dalvik虚拟机(Android 4.4以前)
在Android 4.4以前,Android系统采用的是Dalvik虚拟机(Dalvik Virtual Machine,简称DVM)。Dalvik虚拟机是专门为Android平台设计的,主要特点是:
- 每个应用程序都运行在自己独立的虚拟机实例中。
- 使用寄存器而不是堆栈来执行指令。
- 通过优化的字节码和垃圾回收机制,提升应用程序的性能和效率。
在这个阶段,Android应用程序的运行时库主要是libdvm.so
。
1.2 过渡时期(Android 4.4)
Android 4.4(KitKat)是一个过渡版本,它引入了ART(Android Runtime)虚拟机,同时保留了Dalvik虚拟机。用户和开发者可以在设置中选择使用DVM或ART,这一阶段的系统库包括libdvm.so
和libart.so
。
- Dalvik(DVM):继续支持已有的应用程序。
- ART:提供了更好的性能和更高效的垃圾回收机制,逐渐取代DVM。
1.3 ART虚拟机(Android 5.0及以后)
从Android 5.0(Lollipop)开始,ART虚拟机完全取代了Dalvik虚拟机,成为Android系统的默认运行时环境。ART的优势在于:
- 提高了应用程序的启动速度和运行性能。
- 提供了更高效的垃圾回收机制。
- 支持32位和64位架构。
在这个阶段,Android系统开始分为32位和64位版本。例如:
- Nexus 5:32位,运行Android 6.0
- Nexus 6P:64位,运行Android 6.0
二、APK基本结构
APK(Android Package)文件是Android应用程序的安装文件,它包含了应用程序的所有资源和代码。一个标准的APK文件通常包括以下几个部分:
2.1 assets
assets
目录下包含了应用程序的各种资源文件,如图片、音频、数据库、网页、配置文件、动态链接库(dll)、共享库(so)等。这些资源在应用程序运行时可以通过AssetManager进行访问。
2.2 res
res
目录下存放的是编译后的资源文件,包括布局文件(layout)、程序图标(drawable)等。与assets
不同,res
目录下的资源在编译时会被处理,并在运行时通过资源ID进行访问。
2.3 lib
lib
目录包含了应用程序在不同平台下使用的本地库(so文件)。通常会根据不同的CPU架构(如armeabi、armeabi-v7a、arm64-v8a、x86、x86_64等)放置对应的so文件,以确保应用程序在各种设备上都能正常运行。
2.4 META-INF
META-INF
目录包含了APK文件的签名信息,用于验证应用程序的完整性和来源。通常包括MANIFEST.MF、CERT.RSA和CERT.SF文件。
2.5 resources.arsc
resources.arsc
文件包含了编译后的资源索引信息和资源加密信息(如语言包)。它用于快速查找和加载应用程序中的资源。
2.6 AndroidManifest.xml
AndroidManifest.xml
文件是应用程序的清单文件,包含了应用程序的基本信息(如包名、版本号)、权限声明、组件声明(如Activity、Service、Receiver、Provider)以及代码执行入口等。
2.7 classes.dex
classes.dex
文件包含了应用程序的字节码,是经过Dalvik或ART虚拟机编译后的可执行代码。DEX(Dalvik Executable)格式是Android特有的文件格式,用于在虚拟机上执行应用程序的代码。
相关文章:
Android历史版本与APK文件结构
前言 在移动设备日益普及的今天,Android系统已经成为全球最流行的移动操作系统。作为Android开发者或逆向工程师,了解Android系统的演进历史以及APK文件的基本结构是非常重要的。本文将详细介绍Android历史版本的演变以及APK的基本结构。 一、Android历…...

文件解析漏洞集合
IIS解析漏洞 IIS6 目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp 文件来解析并执行。 这里显示的是 1.asp下的1.jpg,按照道理来说里面的文件是一个图片,但是访问的话,会出…...

如何利用大语言模型进行半监督医学图像分割?这篇文章给出了答案
PS:写在前面,近期感谢很多小伙伴关注到我写的论文解读,我也会持续更新吖~同时希望大家多多支持本人的公主号~ 想了解更多医学图像论文资料请移步公主👸号哦~~~后期将持续更新!! 关注我,让我们一…...
库文件的制作和makefile文件操作基础实现
库文件包括静态库和动态库: 制作动态库命令如下: gcc -fPIC -shared xxx.c xxx.c -o libxxx.so xxx表示文件名 最后会生成一个libxxx.so文件 。这个so文件就是库文件。(若是用到了自己写的.c和.h文件,需要在同一目录下哦&…...

【Linux】进程创建进程终止进程等待
目录 一、进程创建1.1 写时拷贝1.2 frok的常规用法1.3 fork调用失败的原因 二、进程终止2.1 进程退出码2.2 进程退出方式2.2.1 exit函数的使用2.2.2 _exit函数的使用2.2.3 exit函数与_exit函数的区别 2.3 进程信号 三、进程等待3.1 进程等待的必要性3.2 进程等待的方式3.2.1 wa…...
编程的进阶和并发之路
编程的进阶和并发之路 博主在这谈并发,是因为单进程的资源是全局共享,函数作为局部空间来分担分布式计算的过程,掌握并发等于熟悉流式计算和程序执行的通量快速到达结束点。在大数据初期阶段,经验开发缺乏很多模拟数据࿰…...

文件系统 --- 文件结构体,文件fd以及文件描述符表
序言 在编程的世界里,文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录,还是简单的文本编辑,文件都扮演着至关重要的角色。然而,当我们通过编程语言如 C、Java 等轻松地进行文件读写时,背后隐藏的复杂机…...
【第三节】python中的函数
目录 一、函数的定义 二、函数的调用 三、函数的参数 3.1 可变与不可变对象 3.2 函数参数传递 3.3 参数类型 四、匿名函数 五、函数的return语句 六、作用域 七、python的模块化 八、 main 函数 一、函数的定义 函数是经过精心组织、可重复使用的代码片段࿰…...

“论云原生架构及其应用”写作框架软考高级论文系统架构设计师论文
论文真题 近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器和微服务架构为代表的云原生技术作为云计算服务的新…...

深度剖析Google黑科技RB-Modulation:告别繁琐训练,拥抱无限创意生成和风格迁移!
给定单个参考图像,RB-Modulation提供了一个无需训练的即插即用解决方案,用于(a)风格化和(b)具有各种提示的内容样式组合,同时保持样本多样性和提示对齐。例如,给定参考样式图像(例如“熔化的黄金3d渲染样式”)和内容图像(例如(a)“狗”),RB-Modulation方法可以坚持所需的提…...
react native 和 flutter 区别
React Native 和 Flutter 都是用于构建跨平台移动应用的优秀框架,各有其优点和适用场景。 1. React Native 1.1 优点 | 基于 JavaScript 生态:对于熟悉 JavaScript 和 React 的开发者来说,学习成本相对较低,能够利用大量现有的 …...

ITSS服务经理/ITSS服务工程师,招投标需要准备吗?
信息技术服务标准(ITSS)是中国首套完整的信息技术服务标准体系,全面规定了IT服务产品及其组成要素的标准化实施,旨在提供可信赖的IT服务。 在国际竞争日益激烈的背景下,推动国内标准的国际化已成为广泛共识࿰…...
eleven接口、多态
能够写出接口的定义格式 public interface 接口名 { public static final 数据类型 名称 数据值; //抽象方法: 必须使用实现类对象调用 void method(); //默认方法: 必须使用实现类对象调用 public default void show() {...} …...

重磅惊喜!OpenAI突然上线GPT-4o超长输出模型!「Her」高级语音模式已开放测试
在最近的大模型战争中,OpenAI似乎很难维持霸主地位。虽然没有具体的数据统计,但Claude3.5出现后,只是看网友们的评论,就能感觉到OpenAI订阅用户的流失: Claude3.5比GPT-4o好用,为什么我们不去订阅Claude呢&…...
解决问题 CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling `cublasGemmEx
遇到问题如下: Traceback (most recent call last):File "run_warmup_a.py", line 431, in <module>main()File "run_warmup_a.py", line 142, in mainreturn main_worker(args, logger)File "run_warmup_a.py", line 207, in…...
【Python实战因果推断】67_图因果模型2
目录 Are Consultants Worth It? Crash Course in Graphical Models Chains Are Consultants Worth It? 为了展示有向无环图(DAG)的力量,让我们考虑一个更有趣但处理因素并未随机化的情况。假设你是某公司的经理,正在考虑是否聘请顶级咨询顾问。你…...

RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案
RK3588作为目前市面能买到的最强国产SOC,有强大的硬件配置。在智能汽车飞速发展,对图像数据矿场要求越来越多的环境下,如何高效采集数据,或者运行AI应用,成为刚需。 推出的4/8通道GMSL采集/边缘计算盒产品满足这些需求…...

智云-一个抓取web流量的轻量级蜜罐
智云-一个抓取web流量的轻量级蜜罐 安装环境要求 apache php7.4 mysql8 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN 系统演示...
面向对象程序设计之sort排序
目录 java 升序 降序 c# 升序 倒序 小结 敲过排序算法的都会的,Sort排序与compareTo的改写。 java 升序 一般自带的sort方法就是升序的。 Arrays.sort(arr);//传入要排序的数组,默认升序 Collections.sort(list);//传入要排序的集合类&am…...

ARM学习(29)NXP 双coreMCU MCXN94学习
笔者来介绍一下NXP 双core板子 ,新系列的mcxn94 1、MCX 新系列介绍 恩智浦 MCU 系列产品包括 Kinetis 、LPC 系列,以及 i.MX RT 系列,现在又推出新系列产品 MCX 产品,包括四个系列,目前已经发布产品的是 MCX N 系列。…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...