我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

公司最近也开始基于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源码是一个复杂,耗时,熬夜的过程,十分不容易。
但是,释然回首,其实也很简单。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

公司最近也开始基于android4.0 ICS修改框架了,公司的手机暂时不适合拿回家测试,也没有kernel的权限。从个人的角度看,我手上现在有两部手机,一部是Htc G9 Aria,一部是Samsung I9100 Galaxys2,Cy
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录