1. 什么是dex文件
Android dvm执行的是.dex的格式文件,就像java虚拟机一样执行的是class文件,Android程序编译完成后生成.class文件,然后dex工具将.class文件处理成.dex文件,然后将资源文件和.dex文件等打包成apk文件,也就是说apk,Android package中包含资源文件和.dex文件。
dvm是基于寄存器的虚拟机,也就是Dalivk virtual machine,它只能执行.dex的Dalvik executable文件。
2. apk和dex
apk文件即为Android安装包,当程序写好后,使用Android的打包工具,(Android studio的gradle是自动构建工具)。打包工具将.dex文件,res文件,Manifest文件以及依赖库等等组合成一个应用apk,dex文件实际上是Android Dalvik执行程序。
3. Dalvik 和 ART(Android runtime)
- Dalvik是Android5.0之前的运行时虚拟机,支持已转换的.dex格式的java应用程序的执行,Dalvik是经过优化,允许在有限内存中运行多个虚拟机的实例。在5.0之前所使用的Dalvi运行时一个apk中只能包含一个dex文件,为了解决这个限制,我们通常使用multidex support库。
- ART:Android runtime。ART的机制与DVM不同,DVM每次应用运行时需要将字节码通过即时编译器(JIT)转换为机器码,而在ART环境下,应用第一次安装时,字节码会预先编译成机器码,这个过程叫做预编译(AOT,Ahead of time),这样首次启动和执行都会变得更加快速。ART实际上是用空间换取时间,系统的性能会显著提升,应用体验更加流畅,但是机器码占用的空间更大,应用的安装时间也会变长。Android 5.0之后ART是支持一个APK中包含多个dex文件,在APK安装时,会预先扫描所有的classes,.dex文件,把他们编译成一个.oat的可执行文件。
4. adb 命令
adb:Android debug Bridge 调试桥,通过adb 采用监听TCP5554端口通讯? 借助adb工具,可以管理设备和手机模拟器的状态,可以进行很多手机的操作,比如安装软件,系统升级,shell 命令等,adb是连接Android和pc端的桥梁。
adb devices: 显示当前运行的所有模拟器;
adb -s 模拟器编号 命令
adb install -r 应用程序.apk:安装应用程序
adb pull <remote><local> 获取模拟器中文件
abb push <local><remote> 向模拟器中写文件
adb shell :进入shell 模式
卸载apk包:adb shell
cd data/app rm apk包 exit
adb uninstall apk包的主包名
adb help
adb logcat -s 标签名
5. gradle
- 顶层build.gradle:buildscript 和 allproject中两处repository闭包,dependencies闭包声明gradle插件,
- app 目录下module的gradle文件,第一行应用了一个插件,有两种值可以选,com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块,应用程序模块可以直接运行,另一个作为代码库依附于别的应用程序模块来运行。
- Android闭包,在这个闭包中配置项目的基本属性,如编译版本,构建工具版本,buildtype闭包中指定生成安装文件的相关配置。debug和release,debug可以忽略不写,其中minifyEnabled指定是否混淆使用的规则文件还有混淆规则。注意通过Android studio直接运行生成的项目都是测试版安装文件。
- dependencies包可以指定当前项目所有的依赖关系,3种依赖方式:本地依赖,库依赖和远程依赖。本地依赖可以对本地的jar包或者目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖可以对就center或者maven库等等上面的远程仓库添加依赖关系。(会自动下载下来)Gradle在构建项目时会首先检查一下本地是否有这个库的缓存,如果没有回自动联网下载,然后再添加到项目的构建路径中去。