做开源相关的技术人员一定对google退出中国这件事情表示遗憾,特别是对于刚刚进入开源领域的菜鸟们来说。
先说起因吧,最近要在Android4.0.3系统下开发一个C++模块,然后需要下载Android4.0.3系统源代码。而在我费劲心思搞了一天之后,就有了这样一篇博文。
算是对今天的一个总结,给大家一些访问google的方法,希望给大家一条捷径,少走弯路。
准备工作:
1.安装Git工具
sudo apt-get install git-core gnupg
2.安装Java SDK安装
这一部分内容很容易在网上找到。在此我就不详细讲了,大家自行搜索相关博文。
3.安装其他依赖包
sudo apt-get install flex bison gperf libsdl-dev libesd-dev libwxgtk2.6-dev build-essential zip curl valgrind xsltproclib32z1-dev
安装好这些工具和依赖包后,接下来就可以下载、编译、和运行Android源代码了。
想要完全理解Android的build系统,建议你看一下IBM的一篇文章:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/。
下载Android源代码:
1.安装repo, 通过curl下载repo
google s是这样告诉我们的:curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
但是好像是不能访问(如果你会翻墙的话就可以,具体的翻墙方法在附录1中)
解决方法:
http://code.google.com/p/git-repo/downloads/detail?name=repo-1.12 这个链接提供下载repo!
也可以通过下面命令得到:
curl http://git-repo.googlecode.com/files/repo-1.12 > /bin/repo
具体的repo版本可以去查看http://code.google.com/p/git-repo/downloads 页面上的信息,下载那个版本都行。
2.修改执行权限
chmod a+x /bin/repo
3.新建一个目录,然后进入该目录。
mkdir source
cd source
4.执行repo init 创建仓库
repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.4_r1 //下载android-2.3.4_r1android-2.3.4_r1
这一步大概有一分多钟就完成了。
如果需要下载其他分支将android-2.3.4_r1 改成其他分支名称就可以了(比如我这边是改为android-4.0.3-r1)。分支名称请在https://android.googlesource.com/platform/manifest/+refs 里面查看branch
5.执行repo sync 进行同步
repo sync
ps:如果google的镜像不太稳定的话,可以考虑使用中科大的镜像来进行下载:
需要将中科大的镜像作为下载的源:具体方法见:https://www.jianshu.com/p/60ec9db36871
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-2.3.4_r1
6.使用脚本(运维思想,建议大家多写脚本,就可以节省很多时间来代替重复繁琐的命令行操作)
创建脚本download.sh
chomd a+x download.sh让其可以运行,然后终端输入./download.sh就可以开始下载了,用这一步代替官方文档里的repo sync。当连接不上终端时休息3毫秒然后再自动repo sync,这样就不用一直等着不用下班了。
7.编译Android源代码
经过漫长的下载,Android源代码下载完成后就可以进行编译了。
$ source build/envsetup.sh
$ lunch full-eng
$ make -j8
这三行命令的说明如下:
第一行命令“source build/envsetup.sh”引入了 build/envsetup.sh
脚本。该脚本的作用是初始化编译环境,并引入一些辅助的 Shell 函数,这其中就包括第二步使用 lunch 函数。make -j8 中数字代表你处理器的核数。
这个过程花费时间比较长,需要耐心等待。
由于每个人开发环境不一样,因此,期间可能会出现一些问题,这些问题在网上搜索关键词就会找到解决方法。
这里要提到的是,我在编译时遇到:
NO BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR, using only generic configuration
frameworks/av/media/CedarX-Projects/CedarAndroidLib/Android.mk:9: frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_JB42_/Android.mk: 没有那个文件或目录
CEDARX_PRODUCTOR: GENERIC
这样的问题,在google好多解决办法。
不过最后解决问题的是,将frameworks/av/media/CedarX-Projects/CedarAndroidLib/Android.mk:9: frameworks/av/media/CedarX-Projects/CedarAndroidLib目录下存在的LIB_JB42_F33(这个根据你的系统定)改为LIB_JB42_然后重新编译,问题就解决了。
这是非常无奈的办法,因为目前知识和能力有限,没办法去改makefile文件和Android.mk文件中相应部分。
如果你此问题有更专业的解决方法,请留言告诉我,谢谢。
8.运行Android模拟器
启动Android模拟器需要四个文件,分别是Linux内核镜像文件zImage、和三个Android系统镜像文件system.img、userdata.img、和ramdisk.img。
Android模拟器默认使用的zImage文件是位于源代码目录下的子目录out/host/linux_x86/bin中的kernel-qemu文件,而默认使用的Android系统镜像文件system.img、userdata.img、和ramdisk.img则位于ANDROID_PRODUCT_OUT目录中。
ANDROID_PRODUCT_OUT目录是一个环境变量,我们需要将它的值设置为Android源代码编译结果输出目录;
如果不设置这个环境变量,那么我们就需要制定上述四个文件来启动Android模拟器:
emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
当然我们可以编译能够运行在真机上的img,以下几个是源码版本和真机机型的对应关系,可以根据自己想要刷机的机型来下载对应的AOSP源码进行编译,在lunch这一步奏选择目标机型。
https://developers.google.com/android/nexus/images
https://developers.google.com/android/nexus/drivers
版本对应关系https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
最后进入到编译好boot.img system.img data.img的目录下执行下面两条命令:
adb reboot bootloader
fastboot -w flashall
等待一段时间就可以看到新版本系统出现在你的眼前。
9.下载、编译和运行Android内核源代码
Android源代码工程默认是不包括它所使用的Linux内核的源代码的。因此,如果我们需要运行定制的Linux内核,那么就要下载它的源代码然后进行编译。
这一部分内容因为我是很久前完成的,没有关键的截屏和步骤整理,我相信搜索“下载、编译和运行Android内核源代码”一定可以得到详细的步骤。在此我就不赘述了。
附录1:
给出github上两个开源的翻墙工具地址:
1.https://github.com/txthinking/google-hosts
2.https://github.com/racaljk/hosts
如果你嫌麻烦,那我直接推荐你使用下面这条命令:
wget https://raw.githubusercontent.com/racaljk/hosts/master/hosts -q0 /tmp/hosts && sudo mv /tmp/hosts /etc/hosts
ps:因为google的IP会定时更新,所以你也需要定时执行上面这行命令(不用我说,都能看出来是在linux下吧,哈哈)。
如果你希望永久的翻墙,或者在windows、ios或者Android访问google,那么我建议你还是仔细阅读一下上面两个地址中的内容吧,毕竟以后肯定还会用。
刷真机:https://developers.google.com/android/nexus/images
https://developers.google.com/android/nexus/drivers
版本对应关系https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
进入到编译好boot.img system.img data.img的目录下执行下面两条命令:
adb reboot bootloader
fastboot -w flashall