开发环境: Ubuntu 10.04 LTS(64位),四核 CPU,4G 内存
开发机: 三星 Nexus S i9023
安装 Eclipse
在http://www.eclipse.org/downloads/下载200M 左右的Eclipse IDE for JavaEE Developers(Linux 64 Bit),解压,假设解压到~/eclipse下面
把~/eclipse/eclipse.ini 的-Xms40m改为-Xms128m
配置Ubuntu环境
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
sudo apt-get update
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev gcc-multilib g++-multilib libc6-i386 libc6-dev-i386 valgrind sun-java6-jdk
配置USB权限
添加 /etc/udev/rules.d/51-android.rules 文件,内容如下:
# adb protocol on crespo (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="veiz"# fastboot protocol on crespo (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="veiz
veiz 是我的用户名,大家请换成自己的用户名
拉取代码
mkdir ~/bin
PATH=~/bin:$PATH
curl https://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
cd /path/to/android/root repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
今后若需要切换到其他的分支,使用:
repo init -b xxx
开始同步:
repo sync -j4
-j4 表示开4个线程来同步
同步比较慢,想提高效率的话可以用迅雷从我的网盘下载打包好的源码,再在此基础上同步。
下载驱动
同步完成之后,到http://code.google.com/android/nexus/drivers.html下载 Nexus S的驱动,一共四个.sh文件放在源码根目录下,执行之,在输入I AGREE之后脚本文件会释放驱动到vendor目录。如果忘了这步操作,那么编译出来的固件WIFI、蓝牙、GPS等都不能用,只能make clobber之后重编译。
下面开始编译代码和相关工具。
编译ADT
export ECLIPSE_HOME= ~ / eclipsemkdir ~ /adtdevelopment/tools/eclipse/scripts/build_server.sh ~ /adt编译出来的 ADT在~/adt下面
编译完之后在 Eclipse 中安装。
编译SDK
source build/envsetup.shlunch full_crespo-userdebugmake sdk编译到最后若提示pc-bios相关的问题,可执行
cp /prebuilt/common/pc-bios out/host/linux-x86/usr/share
若提示xxx-tests 文件找不到,可到out/host/linux-x86/framework目录下把一些相似文件名的文件复制一份重命名为缺失的文件,然后再make sdk。
配置 Eclipse
编译完成之后,SDK 被打包放在
out/host/linux-x86/sdk/android-sdk_eng. veiz _linux-x86.zip
(veiz是我的用户名)
把这个ZIP 文件解压到其他目录,然后在Eclipse中指定Android SDK的目录为该目录。
将代码风格指定为Android:
在Window->Preferences->Java->Code style 中, Formatter导入Android-formatting.xml, Organize Imports中导入Android.importorder
Android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下
新建一个 Android 程序跑一跑,看看有没有问题。
查看代码时若提示 Source not found,可点击 Change attached source 按钮,指定为源码目录下的
frameworks/android.jar
如果没有这个文件,可以这么做:
下载 http://www.williamhua.com/wp-content/uploads/2009/06/fix_android_sdk.py 脚本,把其中的
return os.path.join(sdk_location, 'platforms', 'android-1.5')
的 android-1.5 改为实际的版本,比如 Android 2.3.4 就改为 android-2.3.4。
Windows 下执行 fix_android_sdk.py
Open attached Javadoc 的时候若找不到Javadoc, 可在工程属性中指定Javadoc目录为SDK目录下的docs/reference
编译固件
lunch full_crespo-userdebugmake -j4
我的 CPU是四核的所以指定-j4
刷写固件
编译完成可以刷固件了。刷之前最好先做好备份工作。
先给Nexus S 解锁:
按上音量键,开机,进入bootloader.
export PATH=out/host/linux-x86/bin:$PATHfastboot oem unlock
重启之后在安卓市场装一个 superuser,再装一个rommanager,把 r ecovery 刷一下,现有固件备份一下。备份完成之后,在 bootloader模式下,export PATH=out/host/linux-x86/bin:$PATHfastboot -w -p flashallfastboot flash boot out/target/product/crespo/boot.imgfastboot flash system out/target/product/crespo/system.imgfastboot flash userdata out/target/product/crespo/userdata.img
重启之后可以进入编译出来的系统了。
如果要恢复之前的系统,在 bootloader模式下选recovery,再选Backup/Restore,之后按提示操作。
去除原生应用
下面尝试修改 Android原生应用。以音乐播放器为例。音乐播放器的apk在system/app目录下,我们需要移除之,否则下面修改并安装Music.apk时会提示系统已存在一个同名的Music.apk。
重启 NexusS,进入 bootloader模式。
rm out/target/product/crespo/system/app/Music.apk
make snod
fastboot flash system out/target/product/crespo/system.img
重启 Nexus S,可以看到主菜单中没有了Music.
修改原生应用
下面使用 GIT建立本地版本库,在此之上对音乐播放器进行修改。
Eclipse 中安装好EGIT 插件 (http://www.eclipse.org/egit/),
在Git repoisitories视图中点第三个按钮Add Git Repositories
在Search criteria 之Directory中填选择源码目录下的packages/apps/Music
点击Search,勾选找到的仓库,完成。
右键点击Branches,选Create Branch
选择Source branch,比如refs/remotes/korg/gingerbread
填 Brach name比如Master,这样本地主分支就建好了。
右键点击Master, 选 Create a newbranch
Sourcebranch: refs/heads/master
Branchname填分支名称,如 branch_experimental
今后修改之后要重置修改可以用 Hard Reset。
下面在我们的 Workspace中导入音乐播放器工程。
Package Explorer中
Import -> Git -> Projects from Git -> Music-packages/apps/Music/.git -> Use the New Projects wizard -> Android->Android Project -> Create project from existing source -> Location: packages/apps/Music -> Finish
修改文件之后,前面会显示 ">",对文件的GIT 操作可以在工具栏进行,也可以右键点击文件,在弹出菜单的 Team子菜单中选择相应操作。
安装 NDK
如果要自己编译 NDK, 按照 ndk/documentation.html 中 Development 一章所说的步骤去做就行。这里偷懒一下:
developer.android.com 刚刚解封了,这是一件好事。我们可以到 http://developer.android.com/sdk/ndk/index.html
下载 NDK, 解压到源码的 ndk 目录下覆盖原原文件,然后执行
export NDK=`pwd`/ndkexport PATH=$NDK:$PATH
然后可以编译 NDK 的 Sample 了。
ndk-build -C ndk/samples/hello-jni/jni
下面可以在 Eclipse 中导入 hello-jni, 运行,屏幕输出 hello jni 的字样。成功!
提取工具链
SYSROOT=$NDK/platforms/android-9/arch-arm$NDK/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/data/my-android-toolchainexport PATH=/data/my-android-toolchain/bin:$PATHexport CC=arm-linux-androideabi-gcc
写一个 C 程序 hello.c, 编译成名为hello 的可执行程序, push 到 Nexus S 的 /data 目录运行
$CC -o hello hello.cexport PATH=out/host/linux-x86/bin:$PATHadb push hello /dataadb shell/data/hello
也可以通过在 Nexus S 上装终端模拟器来运行 /data/hello
(http://blog.csdn.net/veiz)
PS: 上周决心入手 crespo, 加运费保险一起 2450.8元. 下单之后发现支付宝余额不足, 原来忘了之前有过一大笔支出. 于是把现有的支付宝、一张本地银行卡、一张异地银行卡、另一个支付宝余额加上财付通提现,总之把所有能动用的电子支付全掏空了汇集在一起,恰好凑出 2451.6 元...... 真是天意啊~ 上天保佑我的 Android 之旅一切顺利吧!