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特有的文件格式,用于在虚拟机上执行应用程序的代码。

相关推荐
Estar.Lee24 分钟前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
找藉口是失败者的习惯1 小时前
从传统到未来:Android XML布局 与 Jetpack Compose的全面对比
android·xml
Jinkey2 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
大白要努力!4 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟5 小时前
Android音频采集
android·音视频
小白也想学C6 小时前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程6 小时前
初级数据结构——树
android·java·数据结构
闲暇部落8 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX10 小时前
Android 分区相关介绍
android
大白要努力!11 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle