Android BLE自动测试系统与框架

实际开发中,因为需要对不同的BLE设备进行测试。包括语音遥控器,OTA,模组,ble mesh等设备的不同功能进行兼容与稳定性测试,而使用人工测试非常的缓慢且消耗人力。因此开发了一个测试系统用来做自动测试。 同时这个自动测试,可以和CI结合起来,完成DevOps的构建。而且本套系统可以非常好的扩展到嵌入式中的其他测试,也包括其他的IoT RF测试。同时还可以与IC测试结合起来。 演示效果 youku视频: https://v.youku.com/v_show/id_XMzcxNTA2OTQ4NA==.html?spm=a2h3j.8428770.3416059.1 <embed src=’http://player.youku.com/player.php/sid/XMzcxNTA2OTQ4NA==/v.swf’ allowFullScreen=’true’ quality=’high’ width=’480′ height=’400′ align=’middle’ allowScriptAccess=’always’ type=’application/x-shockwave-flash’></embed> 另外一个比较完整的,但是有些程序有些老的测试Demo视频: https://v.youku.com/v_show/id_XMzcxNTIwNTMxNg==.html?spm=a2h3j.8428770.3416059.1 GIF演示,比较大,需要在新标签中打开才能自动播放(对着下面的图片右键–>在新Tab中打开): 系统构成

Continue reading »

跨系统的录音格式兼容性问题: iOS Android

iOS/ OS X支持的可播放的Audio Format与Android支持的有些不一样。因此可能出现在Android设备上面使用MediaRecorder录制出来的音频文件在iOS上面不可用。当然也可能iOS上面录制的audio file在Android上面无法playback。 如果在iOS和Android上面开发类似微信这样的待遇语音交流的软件,那么就需要考虑iOS和Android上面录制出来的音频的跨系统的兼容性。 音频文件的基础知识 这方面涉及到下面几个方面: 采样率 比特率 声音通道 编码格式:指压缩方法 存储容器:即压缩后使用什么方式存储 对于这些可以看文章:How to convert between (most) audio formats

Continue reading »

Android中Native ELF的反汇编与破解的一些经验

工具选择与使用 一般Android运行的HW有: 32Bit的ARM 64Bit的ARM64 X86 X64 对于Intel/AMD的X86/X64, 可选的工具比较多, 因为ELF运行的Host是Android, 使用静态反汇编工具Hopper Disassemble与IDA是比较好的选择. 对于32位ARM的ARM, IDA与Hopper Disassemble都可以完成, 但是对于ARM64就只有Hopper Disassemble了, 当然最新的IDA Pro也可以,但是一般难以获取得到. 剩下的方式就是用readelf +

Continue reading »

LineageOS 14.1(CM14.1)的快速下载与编译

代码的快速下载 Cyanogenmod OS或者说后来的Lineage OS的代码都是分为两个部分: cm团队自己或者社区开发的代码: 主要是适配设备, 例如vendor相关,放在github上面 aosp代码: google的AOSP代码, 作为base 因为本地有一份AOSP的Mirror,所以这部分AOSP代码就不需要再从google去下载了, 直接从本地获取即可.  local mirror的建立可以参考AOSP的repo 与get source相关文档. 关于repo与如何快速使用本地代码可以参考前面的博客: 使用本地AOSP镜像快速获取Android代码 repo详解与如何更改manifest快速获取和复用AOSP代码 修改步骤

Continue reading »

如何减少Android源码size并打包与切割上传共享

源码很大的原因 repo sync下Android的代码, 然后编译后,一般size都在60GB左右, 主要是因为代码中包含了out编译结果产物目录, 以及版本相关的.git与.repo目录, 如果不打包这两个目录, 那么常规的Android 6.0代码压缩后大概为6GB左右. 打包 可以使用类似下面的命令来排除非必须代码和目录以及压缩Android source code, 假设Android源码位于/home/dev/android目录, 那么可以这样子做:     cd /home/dev     tar

Continue reading »

Ubuntu中Mirror Android屏幕

Droid@screen 找了一圈,最后找到一个能用的,而且不需要配置的Droid@screen 主页位于:http://droid-at-screen.org/installation.html 虽然官方没有说可以用于Linux,但是看到使用的是java这个cross platform的language写的,同时还看到需要指定adb,可以才想得到用的是adb的screenshot来不停的截图做的。当然这样的话会很慢,不过能用再说。 使用 下载了jar包后,直接使用java -jar运行即可。 然后会弹出adb指定: 这个位置使用which命令即可得到。 然后是效果图 同时这个可以使用鼠标点击来模拟input。

Continue reading »

Android中使用”hacker”方式解决ServiceManager的权限限制问题(1)

缘由 有一个系统,需要我们的解决方案,但是却没有提供BSP的源码。 我们的方案有一个So文件,并在其中有注册service,但是启动后发现service并没有注册成功,查询log发现是:

看起来是我们不具备权限,然后确定了一下SElinux的状态,发现是没有开启的,而servicemanager对添加service的权限的检查是位于其代码中的。 关于ServiceManager是如何检查权限的可以参考一下stackoverflow中的答案,或者自己看看servicemanager的源码。 参考的链接为这个,从这里面我们可以得知权限的检查写死在了对应的source code中(Android 4.4),暂时没有配置文件,这个和SeLinux不一样。 判断逻辑 ServiceManager的判断逻辑为: 1. uid判断是否为system 2. 是否在可信任的表格中 如果两个都不是,那么就认为没有权限,然后打印出前面的话来。这个对应的代码为:

另外这个allowed的数组为:

从里面的注释可以看出,以后这个可能会变成使用通配符方式,或者是配置文件的方式,但是现在还是直接写死了。

Continue reading »

S5P4418与S5P6618的Android boot.img的解压与压缩, Sparse ext4文件系统

文件类型 4418的boot.img是由kenrel + uramdisk组成的ext4 并且是sparse形式的image, 这里面的sparse是紧凑的意思,即将ext4文件系统中的内容为zero的地方“压缩”起来, 从而减少size。 制作 这种类型的image,使用make_ext4fs, 并使用-s选项制作而成,例如在4418中(其他Android或者文件系统也是类似),命令如下:

  其中-a为lable,最后的参数是制作到文件系统中的目录,因此,制作完成后,可以看到file工具识别到的是data 数据文件:

转化 对此我们可以使用simg2img工具来转换成标准的ext4文件系统的文件:

此时file工具即可识别:

Continue reading »

原生Android系统的第一次开机google验证的解决

网络访问问题 作为Android系统开发者,编译AOSP是无法避免的,下载Nexus系列的AOSP image来使用也是无法避免的。如果是我们自己编译AOSP的话,我们可以选择eng版本,从而省去这些验证步骤,同时也没有各种权限问题,当然SeLinux还是有问题的,但是我们可以很容易的关闭。 如果我们需要下载,或者使用product版本的aosp image,那么一般在第一次开机后,Android系统需要连接google网站,然后让我们选择登录google帐号,如果无法连接到google,那么其实我们是无法进入系统的。因此问题就在于,如何连接到google。 方法 方法有多重,根据个人的开发环境各异,但是一般不外乎下面这两种: 1. 路由器直接有SS可以访问网络 2. 使用代理 如果路由器已经可以访问google,那么也就容易了,但是对于大多数开发者而言,使用第二种方式较为实用和普遍也非常的容易实现。 准备 要使用第二种方式,我们需要下面这些东西: 1. Wifi热点,笔记本自带的一般就可以,也可以使用路由器 2. SS帐号密码,可以到淘宝卖SS的地方找一个试用的来暂时使用,最好是自己的SS Server 步骤

Continue reading »

Freescale IMX6 Android (7): Android启动动画死循环 Home界面不出来与pid XXX exit 可能的原因汇总

或许你某一次编译了整个Android,然后烧进去,结果屏幕中一直显示Android Bootanimation,Home界面一直不出来。对此,可能有以下五类原因,往这几个方向考虑与调查可能可以提供一些线索。前面两类是属于软件的,后面两类属于硬件。最后一类属于软件硬件都相关。 第一类:binder相关

这一类的问题,一般都是因为某个进程退出了,因此binder消息无法发送过去了,因此和下面第二类比较类似。 第二类:pid XXX exit 这类log会不断输出,表现为某个或者某几个线程不断的重启。为何会不断的重启,因为这个是系统关键的线程,可能是守护进程。 那么就需要调查程序为什么会退出,这一般有三种可能的原因: 进程需要的资源无法获得 进程程序有问题 有其他进程在不断的kill(发信号)这个进程 这几类都遇到过,下面举例说明。 进程需要的资源无法获得 有可能是某个分区坏了,而这个线程一定需要在这个分区创建某个文件并写入数据才能执行。 有一些Service可能需要某个属性的值变成特定的值才能运行。 进程程序有问题 在前面的博客:Freescale IMX6

Continue reading »