这个工作很早就在做了,只是一直懒得记录,现在整理下来。
三星wave系列的手机采用的是Bada OS,各种程序各种没有,我于2011年9月购入Samsung Wave II(GT-S8530),从此,折腾的旅程开始了。
国内的各个Bada论坛基本都已死,三星也在2012年直言放弃该系统,故我只能跟随国外XDA大神的脚步,开始了看满屏幕英文的旅程。XDA论坛上还活跃着很多的开发者和用户,其网址为http://forum.xda-developers.com/forumdisplay.php?f=919。 XDA上对于Wave系列手机Android项目的移植始于2011年,期间易手好几代开发者,到现在手机的基本功能均已满足(电话、信息、WIFI、蓝牙、移动数据……)。由于水平有限,我没能够对该项目做出贡献,但熟悉了android源码编译的过程,乐在其中。
闲话少表,开始记录折腾之旅。
1.编译环境的搭建
进行android源码编译的基础条件就是有一台装有linux或者mac的电脑,个人现在用的最顺手的是国内优秀团队制作的linux deepin12.12.1。编译环境的搭建完全参考google在AOSP项目官网的说明http://source.android.com/source/building.html,ubuntu系列的linux系统基本都预装了所需的应用,需要手动安装的Sun Java(哦,现在属于oracle了)的JDK1.6和Git1.7。Git的安装在新立得软件包管理器中安装,简单方便。JDK1.6的安装就稍麻烦了:
首先,从http://www.oracle.com/中下载jdk6,我的版本是1.6.0_45,将下载的jdk-6u45-linux-x64.bin移动到用户主文件夹,文件右键>属性>权限更改为“允许作为程序执行文件”,终端运行 ./jdk-6u45-linux-x64.bin。将会解压出一个文件夹“jdk1.6.0_45”,终端运行
sudo mkdir /usr/lib/jvm/
sudo mkdir /usr/lib/jvm/java/
sudo cp -r jdk1.6.0_45 /usr/lib/jvm/java/jdk1.6.0_45
此时,jdk已安装完毕,下面进行配置
终端执行: sudo gedit /etc/profile
在environment中修改,在文本最后添加
export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_45
export JRE_HOME=/usr/lib/jvm/java/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
export PATH=~/bin:$PATH
保存文件,然后执行:source /etc/profile。使其生效。
由于ubuntu中可能会有默认的jdk,如openjdk,所以,为了使默认使用的是我们安装的jdk,还要进行如下工作。
终端执行:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_45/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_45/bin/javac 300
通过这一步将我们安装的jdk加入java选单。
然后执行:
update-alternatives --config java
通过这一步选择系统默认的jdk
这样,再在终端中分别输入
java -version javac -version 以检查版本
显示
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
javac 1.6.0_45
JDK配置完成。
2.源代码的下载
按照AOSP讲述步骤,下载repo到主文件夹bin目录并加入PATH。
主文件夹下创建工程目录wave,进行repo init,终端执行:
repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
创建localmanifest.xml,新的repo版本识别目录有所改变,于是执行:
mkdir ./repo/local_manifests
cd .repo/local_manifests
wget https://raw.github.com/Badadroid/android_wave_local_manifest/cm-10.1/local_manifest.xml
localmanifest.xml文件被下载到~/wave/.repo/local_manifests文件夹内。
为了方便进行源码的同步操作,我在wave目录下添加了repo断开自动重连的脚本文件,在wave目录下创建新文件,命名为repo.sh,在其内填入
#!/bin/sh
repo sync
while [ $? -ne 0 ]
do
repo sync
done
保存,右键>属性>权限>允许作为程序执行文件,OK
然后就可以进行源代码的下载同步了,终端执行:
cd ~/wave
./repo.sh
耐心等待吧,CM10.1的源代码大概有10G左右,开机下载一夜即完成。
3.源代码的编译
源代码下载完成后,终于可以进行编译工作了,我同样制作了脚本文件build.sh,内容如下
cd ~/wave/
. build/envsetup.sh
brunch wave
编译,终端执行:
cd ~/wave/
./build.sh
出现错误,提示缺少schedtool,在新立得中安装即可。整个编译过程大约需要4个小时。(Intel i3 M330,4GB RAM)