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

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.solibart.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…...

编程的进阶和并发之路

编程的进阶和并发之路 博主在这谈并发,是因为单进程的资源是全局共享,函数作为局部空间来分担分布式计算的过程,掌握并发等于熟悉流式计算和程序执行的通量快速到达结束点。在大数据初期阶段,经验开发缺乏很多模拟数据&#xff0…...

文件系统 --- 文件结构体,文件fd以及文件描述符表

序言 在编程的世界里,文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录,还是简单的文本编辑,文件都扮演着至关重要的角色。然而,当我们通过编程语言如 C、Java 等轻松地进行文件读写时,背后隐藏的复杂机…...

【第三节】python中的函数

目录 一、函数的定义 二、函数的调用 三、函数的参数 3.1 可变与不可变对象 3.2 函数参数传递 3.3 参数类型 四、匿名函数 五、函数的return语句 六、作用域 七、python的模块化 八、 main 函数 一、函数的定义 函数是经过精心组织、可重复使用的代码片段&#xff0…...

“论云原生架构及其应用”写作框架软考高级论文系统架构设计师论文

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

深度剖析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服务。 在国际竞争日益激烈的背景下,推动国内标准的国际化已成为广泛共识&#xff0…...

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

遇到问题如下&#xff1a; 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)的力量&#xff0c;让我们考虑一个更有趣但处理因素并未随机化的情况。假设你是某公司的经理&#xff0c;正在考虑是否聘请顶级咨询顾问。你…...

RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案

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

智云-一个抓取web流量的轻量级蜜罐

智云-一个抓取web流量的轻量级蜜罐 安装环境要求 apache php7.4 mysql8 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN 系统演示...

面向对象程序设计之sort排序

目录 java 升序 降序 c# 升序 倒序 小结 敲过排序算法的都会的&#xff0c;Sort排序与compareTo的改写。 java 升序 一般自带的sort方法就是升序的。 Arrays.sort(arr);//传入要排序的数组&#xff0c;默认升序 Collections.sort(list);//传入要排序的集合类&am…...

ARM学习(29)NXP 双coreMCU MCXN94学习

笔者来介绍一下NXP 双core板子 &#xff0c;新系列的mcxn94 1、MCX 新系列介绍 恩智浦 MCU 系列产品包括 Kinetis 、LPC 系列&#xff0c;以及 i.MX RT 系列&#xff0c;现在又推出新系列产品 MCX 产品&#xff0c;包括四个系列&#xff0c;目前已经发布产品的是 MCX N 系列。…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...