android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi

简介: android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi

android studio 输出apk过程:www.jianshu.com/p/2babb51d2…



1.通过aapt打包res资源文件,生成R.java、resources.arsc(映射文件)和res文件(二进制 & 非二进制如res/raw和pic保持原样)


2.处理.aidl文件,生成对应的Java接口文件


3.通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件


4.通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex


5.通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk


6.通过Jarsigner工具,对上面的apk进行debug或release签名7.通过zipalign工具,将签名后的apk进行对齐处理。


bsh文件:bsh_百度百科



bsh是UNIX命令,bsh 命令调用 Bourne Shell,后者是一个交互式命令解释器和命令编程语言。该 shell 或者从终端键盘交互式地或者从文件执行命令


dex文件:www.jianshu.com/p/7fadc0e3b…



能够被DVM识别、加载并执行的文件格式

二.如何生成和执行dex文件


  • 生成class文件
  • 可通过IDE自动帮我们build,无需手动生成
  • 可手动通过dx命令去生成dex文件
  • 手动运行dex文件在手机


JVM、DVM、ART的区别:www.jianshu.com/p/047d5b00f…



dex文件结构:www.jianshu.com/p/622435319…


363199788f1a42c08f8e8eb34ad6a92f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


.dex文件结构和.class文件结构差异的地方很多,但从携带的信息上看,.dex.class文件是一致的:


  • header:存储了各个数据类型的起始地址、偏移量等信息。
  • proto_ids:描述函数原型信息,包括返回值,参数信息。比如“test:()V”
  • methods_ids:函数信息,包括所属类及对应的proto信息。


虽然.dex文件的结构很紧凑,但想要运行时的性能得到进一步提升,还需要对dex文件进行进一步优化。优化主要针对以下几个方面:


  • 调整所有字段的字节序和对齐结构中的每一个域
  • 验证.dex文件中的所有类
  • 对一些特定的类进行优化,对方法里的操作码进行优化


.dex文件经过优化后文件大小会膨胀,大约增加到原来的1~4倍。对于内置应用,一般在系统编译后,便会生成优化文件odex(Optimized dex)。一个Android应用程序,需要经过以下过程才可以在Dalvik虚拟机上运行:


  • Java源文件编译成.class文件
  • 使用dx工具把.class文件转换成.dex文件
  • 使用aapt工具把.dex文件、资源文件以及AndroidManifest.xml文件组合成APK
  • APK安装到Android设备运行


ART虚拟机



ART(Android Runtime)虚拟机是Android 4.4发布的,用来替换Dalvik虚拟机


将apk文件使用360加压边可以看到Android studio 打包后输出的apk内在文件


a0d7b50c24eb42c3b1d2ded9cc41aff6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg

IOS与安卓的区别:


1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。

2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。

3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。


iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的沙盒技术解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。


安卓虚拟机机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。


ART和Dalvik



Dalvik


打包的过程中 会先将.java等源码通过javac编译成.class文件,再通过dx.class文件转换成Dalvik虚拟机执行的.dex文件。


应用启动的时候 先将.dex文件 转换成机器码,又因为65536的文件,导致在应用冷启动的时候有一个合包的过程,最后的结果就是app的启动时间有可能变慢,这就是Dalvik虚拟机的JIT(Just in Time)特性。


ART除了兼容了Dalvik虚拟机的特性之外,还有一个很好的特性AOT(Ahead of Time),这个特性就是把 .dex 文件转换成机器码 这个步骤提前到了 应用安装 的时候,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,因此会极大的提升APP冷启动速度。


ART 虚拟机的优缺点


优点:

  • 加快APP冷启动速度
  • 提升GC速度
  • 提供功能全面的Debug特性


缺点:

  • APP安装速度慢,因为在APK安装的时候要生成可运行.oat文件
  • APK占用空间大,因为在APK安装的时候要生成可运行.oat文件



目录
相关文章
|
7月前
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
212 0
|
5月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【7月更文挑战第28天】在Android开发中,掌握底层机制至关重要。从Dalvik到ART, Android通过采用AOT编译在应用安装时预编译字节码至机器码,显著提升了执行效率。ART还优化了垃圾回收,减少内存占用及停顿。为了优化性能,可减少DEX文件数量、优化代码结构利用内联等技术、合理管理内存避免泄漏,并使用ART提供的调试工具。
125 7
|
7月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
280 3
|
3月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
75 11
|
5月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
148 0
|
7月前
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
7月前
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
7月前
|
移动开发 监控 小程序
mPaaS常见问题之uniapp ios端云打包的配置config文件如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
196 0
|
7月前
|
缓存 小程序 Android开发
mPaaS问题之iOS调用插件的时候提示没有配置mpaas. Config文件如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
151 1
|
7月前
|
算法 数据库 Android开发
安卓逆向 -- APK文件结构
安卓逆向 -- APK文件结构
81 0