Android ROM开发--ubuntu下载、编译CyanogenMod7

    CyanogenMod是一个开源的基于Android操作系统,也就是大家经常刷机用的CM,至于如何刷机以及如何编译google原生的Android。

可以参考我的iteye博客:http://hualang.iteye.com/admin/categories/166795

在此,有意个建议。如果是做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

http://wiki.cyanogenmod.com/wiki/Main_Page

2、XDA Developer。遇到技术问题多上上面问,大牛很多

http://forum.xda-developers.com/index.php

3、github:如果你编译时缺少某些包,可以到上面找找看

https://github.com/koush

4、CyanogenMod官网,用于下载ROM

http://www.cyanogenmod.com(被墙了,so...)

 

在开始之前你需要root你的手机,在www.cyanogenmod.com里找到针对你的机型的ROM下载并刷机。(国内这段时间墙了,so...)

有关刷机、root等可以到我的iteye博客中找到,也可以到MIUI官网找一些关于刷机的教程

http://hualang.iteye.com/admin/categories/166795

下面开始具体的步骤

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(这样编译就好了)

 

另外还可以参考

http://forum.xda-developers.com/showthread.php?t=899674

里面有解决camera问题的方法(如果上述不奏效的话),不过上面是基于nexus one的,原理一样

 

 

 

 

 

 

 

posted on 2012-02-22 19:40  花郎V  阅读(8832)  评论(1编辑  收藏  举报