Android笔记之:CM9源码下载与编译的应用_Android

公司最近也开始基于android4.0 ICS修改框架了,公司的手机暂时不适合拿回家测试,也没有kernel的权限。
从个人的角度看,我手上现在有两部手机,一部是Htc G9 Aria,一部是Samsung I9100 Galaxys2,Cyanogenmod的开源代码都提供了对这些手机的驱动支持,并且能方便的编译打包,并安装到手机。
上一篇文章是android2.3的编译,已经过时,而且现在ubuntu已经升级到12.04,等等之类的,使我觉得非常有必要重新写一篇新的博客来展示最新的android怎么在最新的ubuntu上编译。
基于以上几点,下面我将基于galaxys2来演示如何编译cm9的源码并打包zip安装到手机。

1.ubuntu12.04的选择
我第一次用x64的系统,发现配置环境的时候,会有很多种错误,后来我用32位的系统,安装这些必备的软件则一点都没有出错,所以在这里,如果用12.04系统编译cyanogenmod ics源码的话,我以个人经验推荐使用32位系统。

2.内存和cpu
因为有些朋友在虚拟机上安装ubuntu,所以内存分配可能会容易偏小,建议尽量偏大,我1G内存的时候,编译中出现过错误,重启设置2G的内存就没问题。
cpu太弱的话,编译的过程中进程也容易被kill掉,我出现过一次,重启后ok。所以cpu的水平要注意一下。

3.java的选择
无论是android官方文档还是上面的那篇文章,java的安装都会找不到,他们的软件源有问题。需要手动安装。
但是android ics的编译,官方文章中指出支持openjdk-6-jdk,所以可以直接安装openjdk6即可。
注意:这里我要说明一下,CM9的编译脚本相对于官方源码的编译脚本忽略了或者说处理了一些可能出现的错误的地方,比如说这里java版本的检测,如果是open jdk的话,官方就编译不过,其实是一样的,只需要修改一下脚本(build/core/main.mk),找到检测java版本的地方:

复制代码 代码如下:

# Check for the correct version of java
java_version := $(shell java -version 2>&1 | head -n 1 | grep '^java .*[ "]1\.6[\. "$$]')
ifneq ($(shell java -version 2>&1 | grep -i openjdk),)
java_version :=
endif
ifeq ($(strip $(java_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of java.)
$(info $(space))
$(info Your version is: $(shell java -version 2>&1 | head -n 1).)
$(info The correct version is: Java SE 1.6.)
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)http://source.android.com/source/download.html)
$(info ************************************************************)
#$(error stop) //如果确定已经安装正确的jdk的话,这句去掉,让编译继续
endif

CM9的编译脚本直接就去掉了这句话,但是还是要注意一下安装正确的jdk版本。

4.解决下载过程中googlesource访问不了的问题
你需要一个vpn帐号来翻墙。
这个我使用我之前购买的一个VPN,也有免费的VPN,具体的免费VPN 和VPN的配置,大家参考下面两个链接:
http://173.252.215.172/server/query
http://173.252.215.172/setting/ubuntu.shtml
配置好了VPN,我们的Ubuntu就可以顺利的下载所有的CM9源码。

5.环境配置
参考官方的Ubuntu 12.04(请注意官方文档,区分Ubutu11.10 x6和之前的系统)的要求,我们需要配置好如下环境:

复制代码 代码如下:

sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386
sudo apt-get install g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown
sudo apt-get install libxml2-utils xsltproc zlib1g-dev:i386

应该不会出什么问题。

6.安装repo

复制代码 代码如下:

cd
mkdir bin
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
alias repo="~/bin/repo"

本来如此即可,但是我们需要随时都能运行repo的话,最好把repo配置到环境中去:

复制代码 代码如下:

vim ~/.bashrc
#打开后,在文件最后面加上alias repo="~/bin/repo",然后保存退出
source ~/.bashrc

下次该用户环境下无论什么时候什么地方都可以repo了。

7.下载CM9源码
列表文件是托管在Github上的:https://github.com/CyanogenMod/android

复制代码 代码如下:

mkdir cm9
cd cm9
repo init -u git://github.com/CyanogenMod/android.git -b ics
repo sync

ics分支就是CM9 ICS的分支了。
慢慢的等待吧(如果下载过程中,不停的提示打不开googlesource的话,记得参考前面配置vpn翻墙,本人改host无效)。

8.配置USB
这一步是为了后面要从你的手机拷贝系统属性文件,用户编译源码的。
ubuntu下不需要装驱动才能连接的上你的手机,但是需要配置,可参考官方:http://source.android.com/source/initializing.html
我这里也简单的写下:

复制代码 代码如下:

sudo vim /etc/udev/rules.d/51-android.rules

然后,添加如下内容:

复制代码 代码如下:

#Samsung
SUBSYSTEM=="usb", SYSFS{idVendor}==04e8, MODE=0666

这是三星手机的配置,其他手机通过lsusb命令查看相应的id,以上述格式添加到/etc/udev/rules.d/51-android.rules文件里即可。
配置好了后,拔掉手机再插上,基本上就可以了。如果还不可以,先kill-server,再用root用户连接。如果还不行,进入android-sdk/tools/,给你的adb这个命令文件"chmod +s adb",kill-server,再adb,多试几次。

9.下载设备专用工程
CM9现在和CM7在下载设备工程不一样,CM7是下载源码的时候就自动下载好了,CM9则没有,但是可以手动智能识别下载。
比如我的手机是galaxys2,则使用如下命令:

复制代码 代码如下:

brunch galaxys2

如果拼写正确的话,它会自动下载galaxys2的相关工程(在目录~/cm9/device/下多了以下目录samsung/galaxys2)。

如果下载完成,进入编译的话,请停止编译,我们还需要进行下一步。

10.获取手机系统属性文件

复制代码 代码如下:

cd ~/cm9/device/samsung/galaxys2
./extract-files.sh
cd ~/cm9
vendor/cm/get-prebuilts

这一步只需要执行一次就可以了。

11.编译CM9源码
CM9的源码比编译Android官方源码相对出错情况会少很多。
首先,初始化变量:

复制代码 代码如下:

cd cm9
source build/envsetup.sh

直接使用命令:

复制代码 代码如下:

brunch galaxys2

然后慢慢的等待吧!
如果是虚拟机的话,内存吃紧和cpu不足的话,随时都可能出错。
如果出现错误的,注意分析一下错误的原因,我这里还比较顺利,中断了一次,重新编译一下又可以了。
ps:如果是官方源码编译的话,我相信总有那么几个错误,CM9要好很多。
编译完成后,会生成一个zip文件,放到手机里就可以刷机了。

12.编译工程
到上面为止,我们已经搭建了一个健康的CM9的环境,但是我们的目地不是编译CM9 ROM,这个CM每天会出nightly版本,所以我们主要是使用这个CM9环境来编译framework,app等工程。
比如第二天我们重新启动,如何编译framework-res.apk,framework.jar,Music.apk?我们需要用到这个环境:

复制代码 代码如下:

cd cm9
source build/envsetup.sh
//注意product名称,chooseproduct的时候,在之前galaxys2要加上cm_,不然找不到产品
chooseproduct cm_galaxys2
//下面进入到framework/base/core/res.编译framework-res.apk
cd framework/base/core/res
mm
//也可以编译framework.jar
cd ~/cm9/framework/base/core/java
mm
//还可以编译Music.apk
cd ~/cm9/packages/apps/Music
mm

如此就可以修改系统ROM,修改系统APP了。

13.小结
搭建Android环境和编译Android源码是一个复杂,耗时,熬夜的过程,十分不容易。
但是,释然回首,其实也很简单。

时间: 2024-09-09 08:44:45

Android笔记之:CM9源码下载与编译的应用_Android的相关文章

《Android的设计与实现:卷I》——第1章 1.3Android源码下载和编译

1.3 Android源码下载和编译 Android源码的开发需要Linux环境,读者可以安装Ubuntu 10.04及其后续版本,推荐安装Ubuntu的10.04或者12.04这两个LTS(长期技术支持)版本.本书基于Jelly Bean(Android 4.1)分析源代码,该部分源代码的编译需要64位操作系统环境.本节将介绍如何在Ubuntu 12.04(LTS)-64bit上搭建Android源码开发所需环境,这是保障后续步骤能够顺利进行的前提条件,必须准确无误.Android源码分成上层

CyanogenMod源码下载和编译(Android ROM定制基础篇)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/27/2193590.html

android源码下载方式

android源码下载方式: 方式一: 1) 创建~/bin $ mkdir ~/bin$ PATH=~/bin:$PATH 2) 下载repo $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo$ chmod a+x ~/bin/repo 3) 创建保存Android源码文件 $ mkdir WORKING_DIRECTORY$ cd WORKING_DIRECTORY 4 ) 下载Androi

收藏了4年的android app源码下载

Android 超过2个G的源代码集合~~几乎涵盖了所有功能效果的实现,一应俱全~~应有尽有~~ 360云盘地址:Android 各类源码集合汇总 (提取码:f930) 另外,附上Github上及自己整理的一些代码集合~~ Android手势处理集合框架 源码 Android 一个简单的缓存框架 源码 Android 一个流畅的PDF阅读器 源码 Android 利用精简Zxing实现条形码/二维码 扫描Demo Android 水波特效(录音功能) 源码 SlidMenu 侧滑菜单.ViewP

Android源码下载及开发环境的搭建

1.前言         前一博文给自己列了一下Android的学习计划,是时候一个个的完成了.如计划列的,我要写的第一篇是<Android源码 的下载及开发环境的搭建>,致于如何去下载源码,其实网上已经一大堆的帖子了,一搜就有.但在这里,我想说,一个源码的下载,不是简单的把源码下载下来之 样就OK了,就可以开始你的源码学习之旅.要想更好的学习源码和进行开发,一个适合自己的开发环境还是必不可少的,这里我会列出来我给自己准备的开发环境 的做法,不能说明是最优的,但至少我感觉对我来说还是挺方便的.

在ubuntu12.04 64位下编译从github上下载的android系统最新源码,出现编译错误

问题描述 在ubuntu12.04 64位下编译从github上下载的android系统最新源码,出现编译错误 在ubuntu12.04 64位下编译从github上下载的android系统最新源码,出现编译错误 make: *** 没有规则可以创建"out/build-full.ninja"需要的目标"prebuilts/build-tools/linux-x86/bin/ckati". 停止. 耗费了2天了还没解决,急 解决方案 http://zhidao.ba

Android源码下载网站

javaapk安卓源码服务专家为您提供专业的安卓手机cocos2dx游戏源码下载.安卓项目源码下载.安卓商业应用源码下载.android app源码以及游戏源程序下载服务.所有android源码都经过严格的人工测试确保可用,源码每日更新.安卓快速开发从javaapk开始. 推荐给大家看看. 网址:http://www.javaapk.com/wp-login.php?action=register&refid=15745

Android仿腾讯QQ实现滑动删除 附源码下载_Android

看了很多大神们的文章,感觉受益良多,也非常欣赏大家的分享态度,所以决定开始写Blog,给大家分享自己的心得. 先看看效果图: 本来准备在ListView的每个Item的布局上设置一个隐藏的Button,当滑动的时候显示.但是因为每次只要存在一个Button,发现每个Item上的Button相互间不好控制.所以决定继承ListView然后结合PopupWindow. 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0"

Android自定义UI手势密码改进版源码下载_Android

在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 源码下载:http://xiazai.jb51.net/201610/yuanma/androidLock(jb51.net).rar 先看第一张图片的布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc