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

   2015-08-24 0
核心提示:本篇文章介绍了,在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)。

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

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

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举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 说一说Android Studio和IDEA中一个很有用的内存调试插件
    说一说Android Studio和IDEA中一个很有用的内存
    JetBrains JVM Debugger Memory View plugin 在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使Android Studio的生活更轻松,我发现一个有用的插件,我从来没有听说过。 这就是为什么,我决定写这个强大的工具,它如何帮助我与内存调试我的应用程
  • 安卓中通知功能的具体实现
    安卓中通知功能的具体实现
    通知[Notification]是Android中比较有特色的功能,当某个应用程序希望给用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知实现。使用通知的步骤1、需要一个NotificationManager来获得NotificationManager manager = (NotificationManager
    02-05 安卓开发
  • Android view系统分析-setContentView
    Android view系统分析-setContentView
    第一天上班,列了一下今年要学习的东西。主要就是深入学习Android相关的系统源代码,夯实基础。对于学习Android系统源代码,也没什么大概,就从我们平常使用最基础的东西学起,也就是从view这个切入点开始学习Android的源码,在没分析源码之前,我们有的时候
    02-05 安卓开发
  • 如何进行网络视频截图/获取视频的缩略图
    如何进行网络视频截图/获取视频的缩略图
    小编导读:获取视频的缩略图,截图正在播放的视频某一帧,是在音视频开发中,常遇到的问题。本文是主要用于点播中截图视频,同时还可以获取点播视频的缩略图进行显示,留下一个问题,如下图所示, 如果要获取直播中节目视频缩略图,该怎么做呢?(ps:直播是直
  • Android NDK 层发起 HTTP 请求的问题及解决
    Android NDK 层发起 HTTP 请求的问题及解决
    前言新的一年,大家新年快乐~~鸡年大吉!本次给大家带来何老师的最新文章~虽然何老师还在过节,但依然放心不下广大开发者,在此佳节还未结束之际,给大家带来最新的技术分享~ 事件的起因不说了,总之是需要实现一个 NDK 层的网络请求。为了多端适用,还是选择
  • SDK热更之如何在SDK代码中自动插桩及如何生成补
    写在前面本文是SDKHotfix相关的SDK热更系列文章中的一篇,以下为项目及系列文章相关链接:SDKHotfix整体介绍:http://blog.bihe0832.com/sdk_hotfix_project.htmlSDKHotfix对应github地址:https://github.com/bihe0832/SDKHoxFix这篇文章主要介绍一下SDK热更
  • 安装量破千万的第一个产品,我总结了3句话
    安装量破千万的第一个产品,我总结了3句话
    在今天的文章中,作者回顾了自己的第一个产品,他说“我做的第一款产品,是我的一块里程碑。”一起来看看~背景老牌大型互联网公司,部门内部创业的一个项目。我作为产品经理,也是第一次做产品经理,主导产品项目。实际上,项目初期包括我和安卓开发2个人。开
  • 移动周刊第 176 期:Android 知识梳理
    移动周刊第 176 期:Android 知识梳理
    写在前面 本期移动周刊第 176 期如约而至,聚焦 Android、iOS、VR/AR/MR、直播等前沿移动开发技术,收录一周最热点,解读开发技巧,每周三移动周刊抢先看,我们希望从中能够让你有一些收获,如果你有好的文章以及优化建议,请发送邮件至mobilehub@csdn.net,
  • Android插件化(六): OpenAtlasの改写aapt以防止资源ID冲突
    Android插件化(六): OpenAtlasの改写aapt以防
    引言Android应用程序的编译中,负责资源打包的是aapt,如果不对打包后的资源ID进行控制,就会导致插件中的资源ID冲突。所以,我们需要改写aapt的源码,以达到通过某种方式传递资源ID的Package ID,通过aapt打包时获取到这个Package ID并且应用才插件资源的命名
    02-05 安卓开发
  • Android架构(一)MVP架构在Android中的实践
    Android架构(一)MVP架构在Android中的实践
    为什么要重视程序的架构设计 对程序进行架构设计的原因,归根结底是为了 提高生产力 。通过设计是程序模块化,做到模块内部的 高聚合 和模块之间的 低耦合 (如依赖注入就是低耦合的集中体现)。 这样做的好处是使得程序开发过程中,开发人员主需要专注于一点,
    02-05 安卓开发
点击排行