跨系统的录音格式兼容性问题: 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 »

repo详解与如何更改manifest快速获取和复用AOSP代码

源起 现在很多企业的网络一般都比较快, 但是有的企业却会限速, 如果需要从github和google code上面git clone大的仓库的话, 那么需要耗费的时间是很客观的,  例如从github或者google code, 或者其他托管服务站点获取Android中需要的多个Kernel仓库, 一般一个kernel仓库都有几GB, 如果是100KB/S的话, 那么将需要很长的时间. 与此同时, 不同的Android 版本(AOSP)代码, 他们一般都会依赖许多相同的组件, 甚至获取相同的仓库代码, 仅仅只是branch或者tag不同而已, 例如对于Nexus

Continue reading »

使用本地AOSP镜像快速获取Android代码

说明 一次次的从AOSP mirror站点获取代码特别慢, 尤其是如果使用的还是google的AOSP Mirror而不是国内的. 因此如果在开发中需要经常性的切换Android branch/Tag, 对不同的Android版本进行开发验证与编译的话, 最好在本地建立一个次级的AOSP Mirror. 这样所有的Android版本都有了, 即节省了流量也节省了时间. 建立本地AOSP镜像 建立本地次级AOSP Mirror直接使用google提供的命令即可, 在repo init的命令后面加上–mirror即可, 例如下面是从TsingHua University的AOSP mirror获取本地一个Mirror.

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 »

CM12.1在Nexus Player上面的安装与问题解决

Nexus Player到手后,需要将系统刷成CM12.1的系统方便调试。本以为和其他Nexus设备一样非常的容易与简单。结果还是遇到了不少问题。 启动后出现SystemUI Not response问题 不管是自己编译的CM12.1,还是使用XDA中其他人编译的或者是CM官方下载的,都有这个问题,这个问题来源于两个方面,一个是App的问题,另一个是Gapps的问题。 APP问题 如果始终出现SystemUI not response,那么可以考虑将TV相关的App都删除,除了那个ARemoteService,这个应该是用于Remote Control的,需要保留。其中正常的列表如下:

  GoogleApps的选择 有两种选择: OpenGapps Vs Stock Apps 这两种都尝试了,都有问题:

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 ADB始终为unautorized的解决

现象 启动后连接ADB,始终无法连接,adb devices显示为没有授权,但是Android端又始终没有出现Debug权限确认的Dialog,让人疑惑不解,尝试了将Android端的Debug 认证记录取消,依然没有解决。

如果使用adb shell查看,那么也是说需要在Android端的对话框中确定接受:

但是实际上,从来就没有出现过询问是否接受PC key和调试的窗口。从后来的解决看,这个提示就是一个坑,让人走到了不正确的方向上。 再三确认了udev rules里面有对应的VID和PID,也确认了Android端的Debug开关因素。在XDA与google上面找了许久也没解决。 解决方案 最后发现是PC端的ADB配置问题,ADB需要在~/.android中配置一把,这里面有key,最为重要的是,需要将VID放入到这个文件中,例如下面的18d1就是Nexus(ASUS)的设备VID:

同时可以看到这个目录中有key相关的东西,原来前面提示的unautorized需要Android端确认,可是确认之前,PC端得生成一个key,并将public key发给Android端,Android设备才会弹出询问是否接受和保存debug PC key的对话框。

Continue reading »

使用Remix OS作为X86 Android系统开发OS

源起 在开发过程中,有需要X86上面的方案,因为Nexus Player还没有到,身边又没有其他Intel Android设备,想到PC就是X86(以及X86_64),为了赶时间,因此决定使用笔记本(MacBook Pro)来安装一个Android X86系统,用来开发。 根据记忆,下载了Remix OS并安装到了U盘,启动,发现确实可以正常使用蓝牙连接BLE Periphiral,因此决定就用这个系统。 squashfs的解压 这篇博客开始是使用X86_64,后面是X86版本的OS,这两者的squashfs的压缩方式不一样,32Bit的OS需要在官网切换到English之后才可以选择下载。 Ubuntu 14.04中的unsquashfs版本为4.2,而且支持的compression只有gzip等几种:

 

可以看到不支持lz4,lzma,所以需要自己去下载最新的来编译。可以参考: http://unix.stackexchange.com/questions/90323/how-to-use-unsquashfs-with-lzma 具体而言就是下载解压,然后修改Makefile将comment掉的各种support uncomment,然后安装对应的lib,例如:

Continue reading »