android studio 输出apk过程:https://www.jianshu.com/p/2babb51d2556
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是UNIX命令,bsh 命令调用 Bourne Shell,后者是一个交互式命令解释器和命令编程语言。该 shell 或者从终端键盘交互式地或者从文件执行命令
能够被DVM识别、加载并执行的文件格式
二.如何生成和执行dex文件
dex文件结构:https://www.jianshu.com/p/6224353197fd
.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
文件组合成APKAPK
安装到Android
设备运行ART(Android Runtime)虚拟机是Android 4.4发布的,用来替换Dalvik虚拟机
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。 2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。 3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。 iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的沙盒技术解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。 安卓虚拟机机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。
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
文件