Build CyanogenMod 12 for Nexus 5

工作之后好久不写博客了,这里都要长草了。。。

之前写过一篇 Build CyanogenMod 10.2 for Nexus 4,现在手机换成 Nexus 5 了,系统也升级到 CM 12 了,写一篇 How to 总结一下。

1. 你还是要准备一台机器(虚拟机也行),装上 Ubuntu,Ubuntu 14 LTS 是个不错的选择,LTS 会有很长时间的软件更新支持。硬盘分的大一些,100GB 起步吧,内存 3G 起,其他随意。

2. 系统装好之后,按照 CM 官方的指导 How To Build CyanogenMod Android for Google Nexus 5 (“hammerhead”) 安装必要的软件。需要注意的是,编译 CM 12 需要 OpenJDK 7,所以安装时,将 openjdk-6-jdk openjdk-6-jre 换成 openjdk-7-jdk openjdk-7-jre,另外 Ubuntu 14 已经没有 ia32-libs 这个包了,需要安装 lib32z1 lib32ncurses5 lib32bz2-1.0 作为 32 位兼容运行时。

3. 之后就可以按照手册准备 repo,使用 repo init -u https://github.com/CyanogenMod/android.git -b cm-12.0 初始化 repo。

4. repo sync

5. breakfast hammerhead

6. 这里建议在 breakfast 之后再 repo sync 一次

7. Nexus 5 的私有库在这里有 https://github.com/TheMuppets/proprietary_vendor_lge,可以将其添加到本地 repo,打开同步好的源码目录,进入 .repo/local_manifests 目录,在其中创建 lge.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project name="TheMuppets/proprietary_vendor_lge.git" path="vendor/lge" remote="github" />
</manifest>

之后再 repo sync 一次。

8. 到这里源码同步完成,可以 brunch hammerhead 啦。

需要注意的是,请使用多种方法科学上网。

Build CyanogenMod 10.2 for Nexus 4

一直想尝试着自己编译 CM,毕竟如果想修改系统 Apk,就有可能需要编译整个系统。于是在开了一台 Ubuntu x86_64 虚拟机(这是一个大坑,等会儿说)作为编译机器,参考的主要是 CM 官方 wiki:http://wiki.cyanogenmod.org/w/Build_for_mako?setlang=en。根据 wiki 指示准备好基础环境后,开始 repo sync,总共下载了 6GB 多的工程代码。总的来说,一直到 wiki 的 “Start the build” 一节,都没有问题,照着做就好了。不过当执行 brunch mako 之后,坑就一个个冒出来了。

第一个坑是磁盘空间,一开始给虚拟机分配的磁盘小了些,明显不足以完成整个编译,于是又加了个 40GB 的虚拟磁盘,并且在该磁盘上编译。40GB 似乎够了,不过最后的事实证明其实 40GB 几乎不够,最终完成编译后只剩 400MB 了!所以编译 Android 还是分配一个大一点的磁盘吧。

第二个坑就是 x86_64,ARM 处理器目前还是 32 位的,包括编译使用的 repo 好像也是 32 位的,所以首先需要安装 32 位 c/c++ 运行库。之后真正的坑在于 JDK,wiki 中没有明确说明 JDK 应该安装 32 位还是 64 位的,我一开始想 java 部分应该和架构没什么关系,就装了个 64 位 JDK,结果开始使用 javadoc 编译 Droiddoc 时,make 出错了,显示错误 45,一开始在论坛上查了一下,说是应该使用 Oracle JDK,于是尝试安装了 64 位的 Oracle JDK,结果还是一样出错。后来仔细看了论坛,发现其实问题是 64 位 JDK。也不知道为什么,64 位 JDK 的 javadoc 就是会导致编译错误,但是之前的 jar 包都编译正常。通过 apt-get 安装了 32 位 Open JDK 后,问题解决了。

第三个坑是内存,一开始只给虚拟机分配了 1GB 内存,结果在编译 framework 时,malloc.c 中的 assert 出错了。。。关机,调整到 2GB,编译终于继续下去了。

第四个坑是 CM 加入的 Focal,在编译 external/Focal 中的链接库时总是出错,论坛上说 Focal 不太稳定,可以不编译。好吧,暴力一点,直接把 external/Focal 和 apps/Focal 删掉了,编译继续。

最终花了一个下午+半个晚上(不包括 repo sync 的时间,这个根据网速会有所不同,可以自己算算下载 6GB 需要多久),终于编译出来了。好了,能编译了,下一步就是准备尝试修改了。

 

CMFileManager for ICS Standalone

CyanogenMod 10 中自带了一个 CMFileManager 的文件管理器,很好用,可以提升到 root 权限进行操作,有类似 Windows 资源管理器的路径导航栏,界面也很简洁、漂亮。这两天给它改了改,移植到 CM 9 之上,并且成为一个可独立安装的 APK 包,不再需要放到 /system/app/ 中。

CyanogenMod 10 has a file manager app called “CMFileManager”, which is simple and easy to use and can run as ‘root’. It has holo style UI. Now, I’ve make a standalone installation package of CMFileManager, you do not need to put it into /system/app/ anymore.

继续阅读

那么多人用 IE!

Android Design 的访问统计中,惊讶地发现 IE 是第二大访问浏览器,而且仅仅落后第一名 Chrome 4个百分点

进一步发现,其中大部分都是 IE 8 带来的

看来 XP 的市场还是广大的,不过作为一名 Android 开发人员,还在用 IE 实在是。。。

曾经一度想在 js 中加上判断浏览器的代码以阻止 IE 9 以下的版本直接访问,后来看在流量的份上还是算了。。。

 

如何让 Android Gingerbread 看起来像 ICS

CM 9 仍然处在 Nightly 阶段,我的 Moto Defy 不知道要到什么时候才能用上 4.0 的稳定系统,于是发挥计算机专业的折腾精神,让 Gingerbread 2.3.7 看起来像 ICS 4.0 也不错。

原版的 CM 7.1 系统看起来是这样的

下面开始动手,注意以下内容请谨慎操作,本博客不承担任何风险。

继续阅读

改用 Android 之后 II

在换到 Moto Defy 进入 Android 阵营之后,曾经写过一篇博客,对比 iOS 系统和 Android 系统。这篇博客被一些网站转载(1, 2)后,被各种“大神”们猛喷

现在 Defy 已经用了快半年,期间也接触过一些别的 Android 手机,最近实验室的项目更是进入了 Android 开发领域,是时候再写一篇,进一步写一写使用的感受。这次就不做对比了,因为手头没有运行 iOS 5 的苹果设备,而且也没有怎么用过新的 iOS。

先看一看之前那篇中写到的观点。

  • 同步

我始终还是认为,iOS 的同步是一个很好的方法,在音乐和视频传输、应用程序安装和数据备份方面都有明显的优势。

继续阅读

改用 Android 之后

最近,终于把用了5年的Nokia 6030换成了Moto Defy,从功能机转换到了智能机,按某人的话说就是“终于符合一个Geek的身份了”。之前一直是6030配合一台iPod touch 2在用,出门的时候要放两台机器在口袋里,估计过一段时间就可以用一个Android完全取代了。

同时使用iOS设备和Android设备,必然会在这两者之间有一些对比,一起来看一看吧。 继续阅读