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

(0)

相关推荐

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

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

  • spring源码下载、编译、debug的详细教程

    零.资源准备及环境配置 记安装时间:2020.02.20 环境准备: 1.idea2019.3.3旗舰版,免费试用30天版本 2.gradle5.6版本 3.jdk1.8.0_202 4.spring源码. spring源码下载链接:https://github.com/spring-projects/spring-framework gradle安装及下载链接:https://gradle.org/install/#helpful-information idea2.019.3.3下载链接:h

  • Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="

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

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

  • Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)

    Hook实现Android 微信.陌陌 .探探位置模拟 最近需要对微信,陌陌等程序进行位置模拟 实现世界各地发朋友圈,搜索附近人的功能,本着站在巨人肩膀上的原则 爱网上搜索一番. 也找到一些 代码和文章,但是代码大都雷同而且都有一个弊端 比如说 微信 对目标函数实现hook之后第一次打开微信 第一次定位是可以改变的 但是 我如果想更换地址的话 就需要重启手机了,重新加载hook了,试了很多次都是这样满足不了需求. 为了改进这个地方我们从gps定义的源代码流程开始看寻找hook系统函数的突破口 我

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

    在之前文章的铺垫下,再为大家分享一篇: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

  • Android中图片压缩方案详解及源码下载

    Android中图片压缩方案详解及源码下载 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图及多图避免程序OOM.还有一个问题就是图片的上传下载问题,往往我们都喜欢图片既清楚又占的内存小,也就是尽可能少的耗费我们的流量,这就是我今天所要讲述的问题:图片的压缩方案的详解. 1.质量压缩法 设置bitmap options属性,降低图片的质量,像素不会减少 第一个参数为需要压缩的bitmap图

  • Android编程实现滑动开关组件功能【附源码下载】

    本文实例讲述了Android编程实现滑动开关组件功能.分享给大家供大家参考,具体如下: 由于Android并未提供滑动开关之类的组件,所以我们需要自己去实现一个自定义的视图组件来实现滑动开关效果. 这里有一个示例代码,它包括三个类:开关组件视图.状态监听接口.MainActivity 我们先来看看整个demo的效果图: 我们先来看看视图组件的完整代码,代码都已经注释: package com.bear.swtichbuttondemo; import java.util.ArrayList; i

  • Android编程实现画板功能的方法总结【附源码下载】

    本文实例讲述了Android编程实现画板功能的方法.分享给大家供大家参考,具体如下: Android实现画板主要有2种方式,一种是用自定义View实现,另一种是通过Canvas类实现.当然自定义View内部也是用的Canvas.第一种方式的思路是,创建一个自定义View(推荐SurfaceView),在自定义View里通过Path对象记录手指滑动的路径调用lineTo()绘制:第二种方式的思路是,先用Canvas绘制一张空的Bitmap,通过ImageView的setImageBitmap()方

  • 实时获取股票数据的android app应用程序源码分享

    最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取股票数据,取名为Mystock.使用开发工具Android Studio,需要从Android官网下载,下载地址:http://developer.android.com/sdk/index.html.不幸的是Android是Google公司的,任何和Google公司相关的在国内都无法直接访问,只能通过VPN访问. 下图为Android Studio打开一个工程的截图: 下面按步介绍Myst

随机推荐