`
iaiai
  • 浏览: 2195510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android系统中的.apk文件和dex文件

 
阅读更多
1.apk文件

APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式,PC上的安装文件的后缀名为“.exe”。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。

一个APK文件结构为:
META-INF\   Jar文件中常可以看到
res\ 存放资源文件的目录
AndroidManifest.xml  程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件

总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。

在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后的androidmanifest.xml文件中的permission分支相 关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。最终我们平时安装的文件可能不是 这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。

2.dex文件

Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。Google 在新发布的Android 平台上使用了自己的Dalvik 虚拟机来定义,这种虚拟机执行的并非Java 字节码,而是另一种字节码:dex 格式的字节码。在编译Java 代码之后,通过Android 平台上的工具可以将Java 字节码转换成Dex 字节码。虽然Google 称Dalvik 是为了移动设备定做的,但是业界很多人认为这是为了规避向sun 申请Javalicense。这个DalvikVM 针对手机程序程式/CPU 做过最佳化,可以同时执行许多VM 而不会占用太多Resource。

对于Android DEX文件进行优化,需要注意的一点是DEX文件的结构是紧凑的,但是我们还是要想方设法的进行提高程序的运行速度,我们就仍然需要对DEX文件进行进一步优化。

调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的没一个域 验证DEX文件中的所有类 对一些特定的类进行优化,对方法里的操作码进行优化 。优化后的文件大小会有所增加,应该是原Android DEX文件的1-4倍。 优化发生的时机有两个:对于预置应用,可以在系统编译后,生成优化文件,以ODEX结尾。

这样在发布时除APK文件(不包含DEX)以外,还有一个相应的Android DEX文件;对于非预置应用,包含在APK文件里的DEX文件会在运行时被优化,优化后的文件将被保存在缓存中


每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。

所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。
不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。

Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完 成虚拟机的初始化,库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时。

Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开 销。Android应用开发和Dalvik虚拟机Android应用所使用的编程语言是Java语言,和Java SE一样,编译时使用Sun JDK将Java源程序编程成标准的Java字节码文件(.class文件)。

而后通过工具软件DX把所有的字节码文件转成Android DEX文件(classes.dex)。最后使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。应用程序包可以被发布到手机上运行。
  • 大小: 37.4 KB
分享到:
评论

相关推荐

    apk.rar_.apk_android_android apk_apk

    标题中的"apk.rar_.apk_android_android apk_apk"暗示了我们正在讨论的是一个与Android操作系统相关的APK文件,它被压缩在名为"apk.rar"的RAR格式文件中。APK是Android应用程序的主要文件格式,它包含了应用的所有...

    android apk等文件下载

    综上所述,Android APK文件是Android系统中应用的核心载体,涉及到下载、安装、安全、开发等多个环节。无论是用户还是开发者,都需要对APK有一定的理解和操作能力,确保安全有效地使用和开发Android应用。而`...

    对apk文件的dex分解

    在Android应用开发中,APK文件是应用程序的打包格式,其中包含了所有运行所需资源和代码。APK文件内部包含一个或多个DEX(Dalvik Executable)文件,这些DEX文件存储了Java字节码,经过优化后供Android的Dalvik或ART...

    ApkToolkit v3.0

    android 反编译 非常好用 主要功能: 1、反编译.apk 对.apk文件进行反编译。 2、重建.apk 根据反编译.apk得到目录重建.apk文件。 3、签名.apk 对.apk文件进行签名。... 将.dex文件转换为.jar文件。

    base.apk.zip

    在Android 5.0及以上版本,系统会预先优化这些.dex文件,以提高应用的启动速度和运行效率。 3. **资源文件**:包括各种图片、字符串、颜色、布局等资源,这些资源在运行时可以根据设备的屏幕尺寸、语言和其他特性...

    Android APK+Dex文件反编译及回编译工具v2.0.2

    《APK+Dex文件反编译及回编译工具》 简称:APKDB 是一款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具; 正常安装后,它直接在【鼠标右键】创建...

    WebViewGoogleArm64.apk

    4. **APK文件**: ".apk" 是Android应用程序的安装包格式,包含了应用的所有代码、资源和元数据。用户可以直接安装APK来更新或安装应用。 5. **安装与更新**: 用户可以在设置中开启“未知来源”安装权限,然后通过...

    odex2dex合并odex和 少dex的apk 为完整的apk文件

    二、合并odex和 少dex的apk 为完整的apk文件 1. 需要odex所在rom中的一些引用类,一般在 /system/framework 目录中 2 . 通过odex生成class文件 java -jar baksmali-1.2.6.jar -x android123.odex 执行完上面这...

    反编译(Android)apk安装程序

    1.首先把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 在DOS模式下运行:dex2jar.bat classes.dex(定位到dex2jar.bat所在目录)。生成classes.dex.dex2...

    framework-res.apk

    framework-res.apk是Android操作系统中的一个核心组件,它包含了Android系统的资源框架,是构建用户界面、图标、字符串等视觉元素的基础。这篇详细解释将深入探讨这个关键文件的作用、结构以及其在Android系统中的...

    ANDROID ROOT.apk

    综上所述,"ANDROID ROOT.apk"是一个可能帮助用户为Android设备获取ROOT权限的应用,涉及到对系统文件的操作和权限提升,这些操作都需要谨慎对待,因为它们对设备的安全性和稳定性有重大影响。在尝试ROOT前,一定要...

    Image Kitchen for Android.apk.zip

    这个应用可能涉及到图像处理、编辑或者与图片相关的服务,但具体功能需要通过解析APK文件来了解。 在网络安全方面,Android应用的安全性至关重要。攻击者可能通过恶意代码篡改APK,导致用户隐私泄露或设备被控制。...

    解包打包android内核system.img文件所需工具

    最后一步:因为system.img中的apk是优化过的,apk主目录下是没有classes.dex文件的,而是一个被优化过的odex文件,用于优化启动速度。 因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,...

    dex.rar_classes.dex下载_dex_lua压缩dex_安卓

    在Android系统中,`classes.dex`文件是Dalvik虚拟机执行的字节码文件,它包含了应用程序的所有类和方法。本教程将详细讲解如何处理和操作`classes.dex`文件,特别是针对`dex`的下载、解压以及使用Lua进行压缩。 1. ...

    .apk 反编译步骤和软件工具

    使用 Android SDK 提供的 `aapt` 工具或者第三方工具(如 Apktool)重新打包资源文件和修改后的 .dex 文件。之后,你需要使用密钥对新 .apk 进行签名,因为未签名的 .apk 无法在 Android 设备上安装。可以使用 ` ...

    反编译apk文件(android)

    1.提取apk中的class.dex文件: 比如有apk文件:qq.apk,将其改名为qq.zip,然后解压,可以看到classes.dex。 2.解压"apk反编译工具.zip": 解压后,将classes.dex拷贝到该目录下,在命令行进入该目录,执行:dex2jar...

    刚做的2款应用 FlyAndTrain.apk CompareProduct.apk

    标题中的“FlyAndTrain.apk”与“CompareProduct.apk”是两个Android应用程序的APK文件,这表明我们要探讨的是Android应用开发相关的知识点。在Android系统中,APK是应用程序的打包格式,包含了代码、资源、配置文件...

    安卓APK导出的dex转jar文件

    首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar 文件夹。 在命令行下定位到dex2jar.bat所在目录,运行 dex2...

    android反编译工具

    1、反编译.apk  对.apk文件进行反编译。  2、重建.apk  根据反编译.apk得到目录重建.apk文件。  3、签名.apk  对.apk文件进行签名。  4、优化.apk  对.apk文件进行优化。... 将.dex文件转换为.jar文件。

Global site tag (gtag.js) - Google Analytics