Android 模拟器下载、编译及调试_weixin_33725239的博客-程序员宅基地

技术标签: 操作系统  移动开发  

Android 模拟器源码下载

Android 模拟器源码的下载与 Android AOSP 源码库的下载过程类似,可以参考 Google 官方提供的 Android 源码下载文档 来了解这个过程。

<!--more-->

不同的地方在于,下载 Android 源码,在初始化 repo 客户端,初始化对某个分支的下载时,通过如下的命令指定该 Android 分支:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

而在下载模拟器源码时,则需要指定一个模拟器的分支。在 https://android.googlesource.com/platform/manifest/+refs 可以看到所有可以指定的分支,包括 Android 分支和模拟器分支,其中模拟器分支主要有如下这些:

emu-1.4-release
emu-1.5-release
emu-2.0-release
emu-2.2-release
emu-2.3-release
emu-2.4-arc
emu-2.4-release
emu-2.5-release
emu-master-dev

在初始化时,需要通过如下命令初始化对模拟器的下载,比如要下载最新的 2.5 版的 Release 版:

$ repo init -u https://android.googlesource.com/platform/manifest -b emu-2.5-release

后面同样通过 repo sync 命令下载整个源码树。

可以将模拟器源码分支理解为特殊的 Android 源码分支。

Android 模拟器编译

得到了 Android 模拟器的源码之后,进入下面的文件夹:

$ cd external/qemu/android/

执行如下命令编译源码:

./rebuild.sh --no-tests

其中的 --no-tests 告诉编译系统,编译完成之后不要执行测试程序,以节省时间,提高效率。

编译完成之后,产生的模拟器可执行文件及库文件都位于 external/qemu/objs/ 目录下:

~/emu-2.4-release/external/qemu/android$ ../objs/
~/emu-2.4-release/external/qemu/objs$ ls
android_emu64_unittests           emulator64-mips
android_emu_metrics64_unittests   emulator64_simg2img
bin64                             emulator64_test_crasher
build                             emulator64-x86
emugl64_common_host_unittests     emulator-check
emulator                          lib
emulator64-arm                    lib64
emulator64_crashreport_unittests  lib64GLcommon_unittests
emulator64-crash-service          lib64OpenglRender_unittests
emulator64_img2simg               qemu
emulator64_libui_unittests        resources
emulator64_make_ext4fs

后面就可以像执行 SDK 中的模拟器那样,执行我们编译的模拟器了:

~/emu-2.4-release/external/qemu/objs$ ./emulator -avd Nexus_5_API_21_arm

Android 模拟器调试

要想调试 Android 模拟器,就需要生成带有调试符号等信息的可执行文件和库。这需要对我们前面执行的编译脚本程序 rebuild.sh 做一点微小的修改,在这个文件中会调用 android/configure.sh 程序来多编译过程做配置:

run android/configure.sh --out-dir=$OUT_DIR "[email protected]" ||
    panic "Configuration error, please run ./android/configure.sh to see why."

默认情况下,这个配置程序生成的配置文件,指导编译过程生成不含调试符号信息的可执行文件和库。但可以为 android/configure.sh 程序的执行加上 --symbols 以生成带有调试符号信息的可执行文件和库。

rebuild.sh 修改之后,大概就像下面这样:

run android/configure.sh --symbols --out-dir=$OUT_DIR "[email protected]" ||
    panic "Configuration error, please run ./android/configure.sh to see why."

修改之后,重新进入 external/qemu/android/ 目录下并执行 rebuild.sh

这次将产生带有调试符号信息的可执行文件和库文件,这些文件位于 external/qemu/objs/build/debug_info 目录下:

~/emu-2.4-release/external/qemu/objs/build/debug_info$ ls
android_emu64_unittests           emulator64_img2simg         emulator-check
android_emu_metrics64_unittests   emulator64_libui_unittests  lib64
emugl64_common_host_unittests     emulator64_make_ext4fs      lib64GLcommon_unittests
emulator                          emulator64-mips             lib64OpenglRender_unittests
emulator64-arm                    emulator64_simg2img         qemu
emulator64_crashreport_unittests  emulator64_test_crasher
emulator64-crash-service          emulator64-x86

原来不带调试符号信息的文件依然位于 external/qemu/objs/ 目录下。

然后就可以通过 GDB 来调试带符号信息的可执行文件和库了。进入 external/qemu/objs/build/debug_info 目录下,执行如下命令:

~/emu-2.4-release/external/qemu/objs/build/debug_info$ gdb ./emulator
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from emulator...done.

该命令用于加载可执行文件。随后,在 GDB 的调试会话中,为可执行文件设置命令行参数,并设置端点:

(gdb) set args -avd Nexus_5_API_21_arm
(gdb) break Thread_pthread.cpp:66
(gdb) break emug::RenderThread::main

需要注意的是,为一个类函数设置端点时,需要带上它的命名空间。

然后启动可执行程序:

(gdb) run

随后在程序执行到我们加端点的位置时,程序将被断下来。

Done.

转载于:https://my.oschina.net/wolfcs/blog/1535080

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33725239/article/details/91867854

智能推荐

鼠标移动痕迹 C#,Delphi,VB,VB.net四种语言版本(附窗体透明)-思路和源代码(3)_翼尘的博客-程序员宅基地

鼠标移动痕迹 C#,Delphi,VB,VB.net四种语言版本(附窗体透明)-思路和源代码(1)鼠标移动痕迹 C#,Delphi,VB,VB.net四种语言版本(附窗体透明)-思路和源代码(2)这两篇分别介绍了VB和Delphi版本,那么现在VB.Net和C#一起说说吧,语言还是很相近的。先C#的,直接就加进窗体,这时候需要四个变量,ox和oy代表前一个x和前一个y,用于判断鼠标

10W+的机会来了!快把文章扔过来_CSDN官方博客的博客-程序员宅基地

都说不爱写博客的程序员,敲不出优质的代码!可是,对于创作者来说,博文有人读、有评论更是是一种莫大的鼓励!百度流量扶持为感谢辛勤创作的博主们,CSDN每天会从原创作者中精心挑选一些优质博文进行百度推广,给大家实行流量扶持计划,被选中的文章会享受到如下福利:推荐至CSDN首页由CSDN官方推荐至百度,百度会加重推荐权限,被推荐的文章拥有更高的SEO权重。入选资格那么,什么样的文章才能获...

浅析实时ETL的实现难点_R芮R的博客-程序员宅基地

Outline some challenges faced by real-time ETL and describe how to overcome them.简述实时ETL的一些难点及其解决办法。答:实时ETL的引入给数据仓库的建设带来了很多新的问题和挑战,下面列举了一些问题,其中有些问题有具体的解决办法,有些只能在实际情况下去斟酌。1.连续的ETL处理对系统可靠性提出更高的要求。...

linux 安装tomcat环境,Linux安装Tomcat环境_weixin_39828956的博客-程序员宅基地

在安装配置完java的基础上,1.下载tomcat*.zip.gz包2.解压至路径/usr/lcoal3.重命名为tomcat(这样就有:/usr/lcoal/tomcat)4.修改/etc/profile(注意和java变量的导出先后次序):---------------------------------------------------------#JAVA_HOME=/usr/src/j...

解决React中不存在refs的问题_康健健健的博客-程序员宅基地

解决React中不存在refs的问题refs: any = React.createRef()

android开发预览excel,Android 通过腾讯TBS实现文件预览功能_weixin_39903176的博客-程序员宅基地

1.集成腾讯tbs使用腾讯tbs来预览pdf,word,excel,ppt等多种类型的文件,去 下载sdk,按照官方文档文档集成sdk。2.使用tbsreaderview来加载文件动态创建tbsreaderview,然后添加到布局中。// 回调tbsreaderview.readercallback readercallback = new tbsreaderview.readercallback...

随便推点

PKI系统深入介绍_weixin_30662109的博客-程序员宅基地

公钥基础设施(PublicKeyInfrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因 此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、证书认证机构CA、PKI应 用、应用编程接口和PKI标准等,并对CA的开发做了简要分析。本文对PKI,特别是C...

JVM笔记-3(双亲委派机制理解)_秃头不用洗发水的博客-程序员宅基地

学习JVM的一点简单笔记,宋红康老师jvm讲的很好,感谢。尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)双亲委派机制双亲委派机制:避免类的重复加载,保护程序安全,防止核心api被随意篡改。假如定义一个自己创建java.lang的包,下面定义一个String类。package java.lang;/** * @Author: 秃头不用洗发水 * @Date: 2021-02-19 * @Description: */public class String

android拖动条拖动改变背景颜色,Android中使用SeekBar拖动条实现改变图片透明度(代码实现)..._格拉摩根终身伯爵的博客-程序员宅基地

场景效果实现将布局改为LinearLayout,并通过android:orientation="vertical"&gt;设置为垂直布局,然后添加一个ImageView和SeekBar,并分别添加id属性。其中SeekBar,添加最大值为255.因为透明度的最大值就是255android:max="255"并设置当前值就是255android:progress="255"完整xml代码xmlns:...

java中float和double的区别_钟眞龙的博客-程序员宅基地_java的float和double有什么区别

Java 中 float 与 double 的区别1.float是单精度浮点数,内存分配4个字节,占32位,有效小数位6-7位double是双精度浮点数,内存分配8个字节,占64位,有效小数位15位 2.java中默认声明的小数是double类型的,如double d=4.0如果声明: float x = 4.0则会报错,需要如下写法:float x =

Spring中bean的生命周期_Offer都没有的渣渣的博客-程序员宅基地

Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化 Bean实例化后对将Bean的引入和值注入到Bean的属性中 如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法 如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入 如果Bean实现了ApplicationContextAware接口的话,Sprin

一股脑追中台就好比没看完阴阳师拍了晴雅集_zero13_小葵司的博客-程序员宅基地

其实中台这个东西,18年就想谈,19年就想吐槽,但是那时候你不能说面对中台大家要冷静,这玩意不是什么新东西也不具备普适性,别被概念炒作坑了。那时候这样讲要被认为是逆潮流的。很多去年要上中台,今年又要追风拆中台的企业,这些企业就像是郭小4刚上映的晴雅集,你都怀疑郭小4是不是就看了阴阳师第一本第一章,也不知道他是基于什么体系训练出来的风格。阴阳师原著就像是中台设计参考的架构设计原则,而晴雅集就是大家追风的中台。所以阴阳师里的博雅贵族出身善良正义共情能力极高,安倍晴明则是天才阴阳师超凡脱俗,二人惺惺相惜;到了

推荐文章

热门文章

相关标签