转载请声明出处。
http://www.cnblogs.com/csonezp/archive/2013/03/21/2974071.html
无图无排版,基本纯文字。
首先提供我这次编译过程的参考来源:
1,android官方指南:http://source.android.com/source/index.html
2,cm 官方wiki:http://wiki.cyanogenmod.org/w/Mako_Info
这两个链接里基本包含了所有编译的内容了。英语好以及有一定基础的可以去看看。
好了,开始正文。
一,初始化编译环境。
1,配置java环境。
android官方要求jdk6或者7,cm上要求是openjdk。
jdk6,android官方指南上说在终端输入以下命令:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk
但我实验后无效果。于是去sun上自己下载的jdk64位包。具体过程不细表。
openjdk:
sudo apt-get install openjdk-6-jdk
装完后 java 和javadoc命令都可以找到即表示jdk安装成功。(javadoc这个是openjdk才有,但是编译的时候又好像需要这个命令,所以我openjdk,jdk6都装了)
二,配置android sdk开发环境。
现在这个简单了,直接去http://developer.android.com/下载一个sdk就行了。其实这一步应该是非必须的,你只要有一个adb就行了。
三,安装依赖。
结合android官方指南和cmwiki,安装依赖如下:
$ sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so $ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool libxml2 xsltproc $ sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-multilib g++-4.5-multilib
四,配置usb使用权
这一步是为了ubuntu能识别通过usb连接的手机。
sudo gedit /etc/udev/rules.d/51-android.rules
然后将下面内容复制到上一句打开的命令中,将所有username换成你自己的用户名。这是google官方提供的nexus系列的方法,通用方法请自行百度“ubuntu连接手机”
# adb protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>" # fastboot protocol on passion (Nexus One) SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>" # adb protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>" # fastboot protocol on crespo/crespo4g (Nexus S) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>" # adb protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>" # fastboot protocol on stingray/wingray (Xoom) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>" # adb protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>" # fastboot protocol on maguro/toro (Galaxy Nexus) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>" # adb protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>" # fastboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>" # usbboot protocol on panda (PandaBoard) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>" # usbboot protocol on panda (PandaBoard ES) SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>" # adb protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>" # fastboot protocol on grouper/tilapia (Nexus 7) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>" # adb protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>" # fastboot protocol on manta (Nexus 10) SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
五,开始同步源码
首先要下载repo,这个是google提供的同步工具。
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo
这样就把repo下载到本地了。接下来初始化repo,为下载做准备。
mkdir WORK_SPACE #WORKSPACE是自定的名称,可以随便取 cd WORK_SPACE #移到WORK_SPACE repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1 #-b后面的 cm-10.1就是cm 4.2.2的分支,可以自己换 repo sync #这个就是开始同步的命令。cm10.1全部同步有9G多
等待同步完毕。
六,编译之前的准备(如无cd命令,则操作均在WORK_SPACE下进行)。
源码同步完以后,是不能直接编译出nexus4可用的刷机包的,因为cm的源码里没有关于具体设备的信息,具体说来就是device文件,kernel文件,vendor文件。其中device,kernel都可以在cm的github中找到,地址(我给的都是nexus4的):
device:http://www.github.com/cyanogenmod/android_device_lge_mako
kernel:http://www.github.com/cyanogenmod/lge-kernel-mako
device解压到device/lge中,将解压的文件夹重命名为mako。kernel解压到kernel/lge中,重命名为mako。
还却一个vendor,如果你手头有机器,则可将手机连接电脑,然后进行如下操作:
用文本编辑器打开device/lge/mako/extract-files.sh,内容如下:
#!/bin/sh
VENDOR=lge
DEVICE=mako
BASE=http://www.cnblogs.com/../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*
for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done
./setup-makefiles.sh
注意红色的adb,要换成你自己的android sdk中adb的位置。
然后执行这个文件
cd device/lge/mako ./extract-files.sh cd WORK_SPACE
执行完毕后打开vendor,就会看到多了个lge文件夹,里面有mako文件夹。
好了,准备工作完成,要开始编译了。
七,开始编译。
进入work_space,
source build/envsetup.sh breakfast mako #mako是设备代号,可以替换成其他的
等待编译完成,将会在out/target/product/mako里生成一个cm-10.1-20130321-UNOFFICIAL-mako.zip文件
结束。
http://www.cnblogs.com/csonezp/archive/2013/03/21/2974071.html