《深入理解Android:Telephony原理剖析与最佳实践》一2.3 Android常用工具使用及相关技巧说明

简介: 本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第2章,第2.3节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 Android常用工具使用及相关技巧说明

搭建Android编译环境到现在已经完成95%,Android常用工具的使用方法及相关技巧是本章非常重要和关键的内容,其中包括使用本地编译好的IMG镜像文件启动Android AVD(Android Virtual Device)、本地重新创建IMG镜像文件和adb(Android Debug Bridge,Android调试桥)调试工具的使用等,这样就可以更好、更方便地修改、调试Android源代码了。

2.3.1 使用本地编译成功的镜像文件启动Android模拟器

前面的很多准备工作都是为了能成功编译和修改Android源代码,最终能重新生成修改Android源代码后的IMG镜像文件,那么,该如何使用镜像文件来启动Android模拟器呢?
Android源码编译成功后,在$workdir/out/target/product/generic会生成IMG镜像文件,通过system.img、userdata.img和ramdisk.img这3个镜像文件便可启动Android模拟器,其命令如下:

export imgpath=$workdir/out/target/product/generic
emulator -image $imgpath/system.img -data $imgpath/userdata.img \
-ramdisk $imgpath/ramdisk.img

执行上述命令后,便可以启动一个默认配置的Android虚拟设备,这种启动虚拟设备的方式和通过Android官方发布的SDK启动的虚拟设备有什么不同吗?它们都是基于Android 4.0.3的运行效果,不同的是这里采用本地编译的IMG镜像文件启动虚拟设备。注意,它的意义是运行本地编译的IMG镜像文件,也就意味着修改Android源码后再编译生成镜像文件,通过加载镜像文件运行虚拟设备从而能够运行、调试Android源代码。
技巧 查看、修改Android源代码后,如果每次都按照make方式进行整体编译生成IMG镜像文件,make所消耗的时间较长;此时可进行模块编译,然后通过mkyaffs2imag工具重新生成镜像文件,这样可以减少编译时间从而提升效率。
Android系统中编译出来的system.img、userdata.img、ramdisk.img等镜像文件采用的是YAFFS2镜像文件格式,在Android中包含了mkyaffs2imag工具,它是一个YAFFS2镜像文件格式的制作工具,Android源码编译成功后在$workdir/out/host/linux-x86/bin目录下编译生成mkyaffs2imag可执行文件,其运行方式如下:

cd $workdir/out/target/product/generic
$workdir/out/host/linux-x86/bin/mkyaffs2image system system.img   

/ 第一个参数system为一个目录,此目录下有需要生成system.img镜像的所有文件,在Android全部编译后会自动生成,在进行单个模块编译时会将最新编译好的应用apk、so动态链接库或一些可执行文件等放入system目录下的对应路径,一般情况下,不要改动system目录中的内容 /
技巧 启动模拟器和生成IMG镜像文件的相关命令可分别写入Shell脚本,以提高效率。将mkyaffs2image可执行文件用root用户复制到/usr/bin下,这样不需要配置就可以在任何地方运行mkyaffs2image制作镜像文件,可将自己编写的Shell脚本放入/usr/bin目录下从而减少bin目录的设置。
启动模拟器的脚本如下:

#!/bin/sh
imgpath=$workdir/out/target/product/generic
nohup emulator -avd MyFistDevice -image $imgpath/system.img –data\
$imgpath/userdata.img -ramdisk $imgpath/ramdisk.img >/dev/null 2>&1 &

制作IMG镜像文件的Shell脚本如下:

#!/bin/sh
imgpath=$workdir/out/target/product/generic
rm $imgpath/system.img
mkyaffs2image $imgpath/system $imgpath/system.img

2.3.2 Android调试工具adb的使用方法

Android模拟设备启动完成后,会默认通过5554端口连接到计算机,这时可运行adb devices命令查看连接到本地计算机上的Android设备列表,详情如下:

$adb devices
List of devices attached 
emulator-5554   device   //device状态为正常情况,可查看模拟器运行日志
查看虚拟机运行日志:
adb logcat: 查看应用日志,可结合|grep过滤匹配自己想查看的日志内容;
adb logcat –b:Radio 查看RIL日志。

注意 当adb无法连接Android AVD虚拟设备时,若设备连接状态为offline或是no permissions,则可尝试使用root用户执行adb kill-server来重启设备连接。一般来说,adb kill-server重启设备连接的有效期与Ubuntu系统的运行周期一致,开机或重启一次Ubuntu便需要重启设备连接。

2.3.3 进入Android虚拟设备控制台模拟短信、来电等功能

启动虚拟设备以后,可在虚拟设备窗口的左上角看见与“5554:”类似的信息,5554代表虚拟设备连接的端口号,可以使用“telnet localhost 5554”命令进入到模拟设备控制台。
注意 同一台计算机可以同时启动多个AVD虚拟设备,这些虚拟设备连接的端口号都不一样。第一个启动的虚拟设备端口号为5554,后面新启动的虚拟设备连接的端口号逐个加1,所以启动多个AVD之后,需要进入其虚拟设备控制台时要弄清楚进入的是哪个虚拟设备。
这里主要介绍模拟给AVD去电和发送短信,其他一些控制虚拟设备的方式可以通过help了解。详情如下:

$ telnet localhost 5554
Trying ::1...
Trying 127.0.0.1...
……
OK    //说明成功进入模拟器控制台
gsm call 1111 //模拟1111给Android模拟器去电,观察模拟器,弹出1111电话来电界面
OK//模拟拨号成功
sms send 1111 hello android//模拟使用1111号码发送短信,其短信内容为“hello Android”
                  //发送到模拟器,Android模拟器通知栏会发出接收到新短信通知
OK//模拟发送短信成功
help//其他功能可执行help获取帮助
Android console command help:
    help|h|?         print a list of commands
……

Android的这些工具做得太棒了,在Android虚拟机上可以非常方便地模拟电话、短信,请读者一定在本地环境中熟悉这些工具的使用法,这在后续深入学习Android中会带给我们很多方便。

相关文章
|
29天前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
|
2月前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
142 8
|
7天前
|
缓存 Java 数据库
Android的ANR原理
【10月更文挑战第18天】了解 ANR 的原理对于开发高质量的 Android 应用至关重要。通过合理的设计和优化,可以有效避免 ANR 的发生,提升应用的性能和用户体验。
27 8
|
25天前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
31 3
|
2月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
42 2
|
2月前
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
182 12
|
26天前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
19 0
|
3月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
50 1
|
3月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
85 0
|
4月前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异性:平台、工具和用户体验的对比分析
【7月更文挑战第30天】在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着不可忽视的地位。本文将深入探讨这两大平台在开发环境、工具选择以及最终用户体验上的根本差异,并分析这些差异如何影响开发者的策略和用户的偏好。通过比较安卓的开放性与iOS的封闭性,我们将揭示不同平台下的开发哲学及其对生态系统的影响。
44 4