Android源代码的下载,编译和运行

做开源相关的技术人员一定对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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值