自制java虚拟机_《深入理解Android:Java虚拟机ART》 —1.2.3 准备模拟器和自制系统镜像...
1.2.3 准备模拟器和自制系统镜像
阅读源码是学习虚拟机的主要方法。但在某些关键地方,有时候很难确定代码逻辑的走向,这时就需要在源码中加一些日志来辅助我们观察虚拟机的行为。在此,笔者推荐使用模拟器和自制系统镜像来帮助我们达到这个目标。
自制系统镜像是由上文下载的Android源码文件编译而来。我们可以随心所欲地通过修改源码文件来定制Android系统。当然,这个由我们自己编译而来的系统只能跑在模拟器中。即便如此,这对我们学习ART虚拟机来说也是莫大的帮助。
1.2.3.1 准备好模拟器
读者需首先安装Android Studio。然后随便打开一个Android应用工程。单击菜单栏右边的avd manager图标,启动AVD界面,如图1-5所示。
图1-5 AVD界面
图1-5中,笔者创建了两个虚拟设备,一个是运行Android 7.0系统的innost-7.0设备,一个是运行Android 9.0系统的innost-9.0设备。
单击图1-6中左下角的“Create Virtual Device”,出现图1-6所示的设备硬件配置界面。
图1-6 设备硬件配置界面
读者可自定义硬件配置或者从谷歌相关手机产品中选一个手机型号。比如Pixel XL。然后单击图1-6右下角的Next。出现图1-7所示的系统镜像选择界面。
图1-7 系统镜像选择界面
建议读者选择Nougat x86系统镜像。也就是说,我们后面要分析的ART虚拟机将以x86 CPU为平台。
为什么选择x86平台?
工作用的台式机或笔记本主要是x86平台。所以,模拟器运行x86系统镜像的速度非常快。笔者之前尝试过使用arm平台,但模拟器运行的速度较慢。另外,根据上一节笔者统计的代码量可知,6个CPU平台总汇编代码的有效代码行数/总有效代码行数大概为6.02%,平均每个CPU平台的汇编代码行数才占总代码行数的1%左右。从这一点可以看出,汇编代码虽然重要,但它不会影响虚拟机学习。值得注意的是,Android SDK从8.0开始就不再提供ARM平台的模拟器镜像文件。
虚拟设备准备就绪后,读者可以启动它。这时,这个虚拟设备运行的是官方提供的镜像。
1.2.3.2 自制系统镜像
现在,我们有了Android源码、虚拟设备和官方下载的镜像文件。接下来需要编译Android源码以生成一个系统镜像文件,然后用这个系统镜像文件来启动虚拟设备。如此,就达到了让虚拟设备运行我们定制的系统镜像的目标。
编译系统的步骤如下。
[自制系统镜像]
cd android-7.0 #进入源码目录
. build/envsetup.sh #初始化AOSP编译环境
lunch #选择编译目标,执行后的结果如图1-8所示
执行lunch命令后,会显示如图1-8所示的内容,里边是各种不同的目标设备。请读者选择第8项(下面将介绍第8项的来历)。它表示要编译设备类型为"innost"的设备,该设备使用的CPU为x86,编译类型为userdebug。接着看下一步。
[自制系统镜像]
#执行下面的命令
make systemimage #编译系统镜像
#最终生成的系统镜像文件路径为
#out/target/product/innost_x86/system.img #这就是我们编译得到的系统镜像
最后,让模拟器使用我们编译得到的系统镜像文件,方法如下。
#当前在android-7.0目录下。假设android sdk位于
#~/workspace/android/android-aosp-sdk中,下面的命令将启动emulator,其中:
#-avd参数用于指明虚拟设备名,参考图1-4,我们选择的是innost-7.0这个虚拟设备
#-system参数指明系统镜像的路径,我们使用自己编译得到的系统镜像文件
~/workspace/android/android-aosp-sdk/tools/emulator \
-avd innost-7.0 -nojni -writable-system \
-system `pwd`/out/target/product/innost_x86/system.img
由于本书的目标是研究ART虚拟机,所以,我们自己编译的系统镜像并不需要包含太多的应用程序,只要保证系统启动必需的几个核心应用程序即可。为此,笔者在源码根目录/device下新增了一个名为innost的设备类型。图1-9展示了该目录下的文件。
图1-9展示了innost设备类型下包含的文件。当把这些准备好后,我们执行如下命令时才能出现图1-8中的第7和第8项。
. build/envsetup.sh
lunch #将出现图1-7中的innost设备
读者可从笔者分享的链接中下载如图1-9所示的innost设备目录文件。本书所有资源的下载说明见1.4节的内容。
如果读者下载了笔者分享的Android 7.0源码的话,device目录下已经包含了innost设备目录的文件。
自制java虚拟机_《深入理解Android:Java虚拟机ART》 —1.2.3 准备模拟器和自制系统镜像...相关推荐
- 深入理解Android Java虚拟机ART相关及勘误
公众号: 神农和朋友们的杂文集 目录 本书的简单介绍 本书各章的难度评估 深入学习有什么好处? 本书勘误表 P14 P21 本书的简单介绍 <深入理解Android Java虚拟机ART> ...
- vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...
本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析.内容详实,语言通俗易懂.理论结合实践,让学习本套视频的朋友可以更快的理解虚拟 ...
- 鸿蒙用java虚拟机_鸿蒙运行Android应用的时候还会有JVM虚拟机?
楼上全部都在一本正经的胡说八道.类java语法不是java这个都不懂吗?包含google在内,只是长得像java结构类似,而不是java也没有所谓的java虚拟机,而是完全自己的 dalvik和jvm ...
- java中view是什么_深入理解Android中View
文章目录 [隐藏] 这回我们是深入到View内部,去研究View,去了解View的工作,抛弃其他因素,以便为以后能灵活的使用自定义空间打下一定的基础.希望有志同道合的朋友一起来探讨,深入Android ...
- Java继承_深入理解Java继承、封装、多态的实现原理
点击关注上方"Java技术江湖",设为"置顶或星标",第一时间送达技术干货. 作者:黄小斜 文章来源:微信公众号[Java技术江湖] 目录 从JVM结构开始谈多 ...
- 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备
Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...
- java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...
- java 汇编_大话+图说:Java 汇编指令——只为让你懂
原标题:大话+图说:Java 汇编指令--只为让你懂 前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指 ...
- 一个上帝视角的java游戏_从上帝视角看Java如何运行
JVM内存结构 可以看出JVM从宏观上可以分为 '内部' 及 '外部' 两个部分(便于记忆理解): '内部'包含:线程共享(公有)数据区 和 线程隔离(私有)数据区 '外部'包含:类加载子系统.垃圾 ...
- 阿里java面_我的后端Java面经、八面阿里,已拿offer!
阿里巴巴面试自我介绍 讲一个项目,我说的区块链,然后围绕着区块链说了一堆,比如说我没回答上来的,有没有做性能测试,还有orderer节点都有什么服务 最大堆概念 排序算法比较排序时间复杂度,如何查找最 ...
最新文章
- spring + Quartz定时任务配置
- WCF第一个Demo
- 在LINUX下架设防火墙
- UI设计实用素材|寻找一种新的方法来设计网站,单页网站
- Qt学习笔记常用容器
- JavaScript基础知识。
- 【SpringBoot_ANNOTATIONS】组件注册 05 @Lazy 懒加载
- android studio for android learning (十三) 一个简单的图片查看器示例
- kali linux怎么装软件,linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)...
- tf卡加卡套的区别_tf卡,详细教您TF卡与SD卡有什么区别
- 【华人学者风采】周明 微软亚洲研究院
- 2021高考倒计时HTML源码,2021高考倒计时
- html鼠标放大镜效果,CSS3实现鼠标放大镜和放小镜的效果
- 【哔哩哔哩笔试】顺时针打印数字矩阵
- 做服务号还是订阅号?
- 每日一题:由棋盘放麦子引出Java的BigInteger
- FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)
- 魔兽怀旧服服务器怎么修改,《魔兽世界怀旧服》转服功能怎么用 转服功能使用方法教程...
- windows下git bash 添加zip命令功能
- 支持谷歌Android Market,Nexus 7第二代支持谷歌Android Market吗