Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统,它是基于Debian发行版和GNOME桌面环境,Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。
而CyanogenMod 是一个免费、基于社区构建的 Android OS 的修改和改进版本,供某些手机使用的二级市场固件。它提供一些在官方Android系统或手机厂商没有提供的功能 。
CyanogenMod是一个开源的基于Android操作系统,也就是大家经常刷机用的CM,至于如何刷机以及如何编译google原生的Android
在此,有意个建议。如果是做Android开发的最好还是用google亲生的手机作为测试机(nexus one、nexus s、nexus prime),因为这些机型不仅性能强大,支持原生操作系统,还支持很多其他机型目前还没有的功能(比如我的HTC desire z不支持NFC),另外如果想刷机也可以找到n个版本。而其他机型总是存在这样那样的问题,做开发遇到基于其他机型的问题时也难以找到合适的答案,闲话不说了。
我博文是关于如何下载、编译CyanogenMod,以及如何自定义自己的ROM系列,比如我们比较熟悉的小米手机的MIUI就是基于CyanogenMod。但是因为自己换了不同手机,所以以前基于Nexus S的一些操作不适合于现在的机型了,但是大概流程是一样的。在这里最最麻烦的不是下载源码,而是--编译CyanogenMod。各种各样的问题,每一次编译都要至少1、2个小时,我话费了5天来编译源码,期间遇到各种各样的问题,随着一点一点的查询也逐个的解决了,今天终于编译成功、刷机成功了。
机型:HTC desire z(HTC vision)
Android源码:CyanogenMod 7(下载的最新的CM源码2.3.7编译还有问题,所以用的是稍微老一点2.3.4的)
电脑:Thinkpad 32位
系统:Ubuntu 10.10
问题解决:如果你的机型不是这个,编译的源码版本也不是这个,遇到问题最好还是去外面查查(程序员必备技术,你们懂得),下面是一些对你有帮助的网站
1、CyanogenMod Wiki。可以根据上面的教程来下载并编译适合你机型的CM
2、XDA Developer。遇到技术问题多上上面问,大牛很多
3、github:如果你编译时缺少某些包,可以到上面找找看
4、CyanogenMod官网,用于下载ROM
(被墙了,so...)
在开始之前你需要root你的手机,在www.cyanogenmod.com里找到针对你的机型的ROM下载并刷机。(国内这段时间墙了,so...)
有关刷机、root等可以到我的iteye博客中找到,也可以到MIUI官网找一些关于刷机的教程。
下面开始具体的步骤
1、安装软件
首先需要你安装并配置好Android环境,这个不解释
For 32-bit & 64-bit systems:
sudo apt-get install 下面软件列表(如果某些安装有问题,最好一个一个的下载安装)
git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-JDk pngcrush schedtool
For 64-bit only systems:
g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib
NOTE: gcc-4.3-multilib g++-4.3-multilib is no longer available for Ubuntu 11.04 64-bit, but should still build without issue.
NOTE:On Ubuntu 10.10, and variants, you need to enable the parter repository to install sun-java6-jdk:
add-apt-repository "deb http://archive.canonical.com/ maverick partner"
Download RomManager
2、创建目录
在终端中输入下列命令下载并执行repo
创建一个目录,用于存放源代码
$mkdir -p cyanogenmod
$mkdir -p bin
3、初始化下载库
在终端中输入下列命令下载并执行repo:
$curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$chmod a+x ~/bin/repo
注意:你需要重启电脑来使其生效
$chmod a+x ~/bin/repo
4、下载CyanogenMod源码
在终端中输入下列命令下载并执行repo:
现在输入下列命令来初始化版本库:
$cd ~/cyanogenmod
$repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$repo sync
或者repo sync -j16(-jn中的n表示打开的网络连接数,开启多个网络连接可以加速下载速度)
出现如下的状态就表示下载完成了(耗时教长,我用的是4M带宽下了3个小时,大小4G多)
5、获取属性文件
此时需要将手机通过USB连接到Ubuntu上。如果一开始不知别手机设备的话,可以参考http://www.cnblogs.com/loulijun/archive/2012/01/10/2318316.html来解决
然后在终端中输入
$adb devices
如果显示如下错误的话,可以通过如下命令来解决(以后再遇到就用这种方式解决就是了)
$sudo adb kill-server
$sudo adb devices
$cd ~/cyanogenmod/device/htc/vision/
$./extract-files.sh
NOTE: 注意,如果你获取文件的时候缺少某些如照相机或radio等文件时,你可以到上面的网站找找是否你需要的文件
6、下载 RomManager
$cd ~/android/system/vendor/cyanogen/
$./get-rommanager
7、编译CyanogenMod
编译源码
编译源码之前,因为源码默认设置是在64位机编译的,所以你需要修改其为32位即可
64位改为32位方法
build/core/main.mk:73: You are attempting to build on a 32-bit system.
build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
是因为cm默认只支持64-bit,而我的计算机是32位的,所以需要修改一些文件即可
将
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
4个文件中的
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
注释掉,或者将“64”换成“32”
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
然后,将./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))
这样,32位的计算机也可以正常编译了
NOTE:最新版本的CM源码没有ifneq(64...)这部分,所以就不许要改了
$. build/envsetup.sh && brunch vision
编译成功后
8、刷机
正常情况下可以刷成功,刷机教程看上面
9、编译期间遇到的问题
(1)执行.extract-files.sh如果获取手机的属性文件缺少的话,如下图。可以到
https://github.com/koush/proprietary_vendor_htc/tree/gingerbread/vision/proprietary
上寻找你缺少的文件,下载后放到
/home/loulijun/cyanogenmod/vendor/htc/vision/proprietary下即可
(2)undefined reference to 'msm_device_mute'、libaudio.so错误
这种错误网上的有些方法依然不能解决,我是换了从cm2.3.7最新的源码为cm2.3.4的。或者关闭audio的编译选项,可以到vendor和device下找到相应的mk文件将设置audio的true设置为false
(3)undefined reference to 'HAL_getCameraInfo'、libcameraservice错误
解决办法:
$cd /cyanogenmod/device/htc/vision
$vim BoardConfig.mk
将BOARD_USE_FROYO_LIBCAMERA := false(设置为false)
$cd /cyanogenmod/vendor/htc/vision/
$vim BoardConfigVendor.mk
将USE_CAMERA_STUB设置为false(这样编译就好了)
里面有解决camera问题的方法(如果上述不奏效的话),不过上面是基于nexus one的,原理一样
在学习Android ROM开发的过程中,首先需要下载安装ubuntu与编译CyanogenMod7,上文有安装ubuntu的详细步骤,编译CyanogenMod7的步骤也非常清晰,编译过程中遇到的问题与解决的方法。在学习Android ROM开发前,需要学习ubuntu与CyanogenMod7相关知识,这样再来学这篇文章时就不会那么吃力。希望本文对你学习Android开发有帮助。