zoukankan      html  css  js  c++  java
  • 第4章 源代码的下裁和编译

    使用环境

    1.需要Ubuntu 64bit,建议Ubuntu14.04 64-bit

    安装Rope

    1.打开终端输入

    $ makdir ~/bin
    $ PATH=~/bin:$PATH

    2.完成后输入以下命令

    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo

    下载源码

    1.建立android源码存放目录

    $ mkdir AOSP
    $ cd AOSP

    2.初始化git信息

    $ git config --global user.name "Your Name"
    $ git config --global user.email "Your@exampld.com"

    3.初始化源码信息

    $ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r11

    4.同步下载

    $ repo sync -j8

     

    之前我们所做的搭建编译环境与下载Android源码,其实最终都是为了能够顺利的把Android源码编译出来。准备工作做好了以后,今天咱们就来把之前下载好的源码编译一下吧。

    凡是有官方指导文档的,我一定都要去看一下。Google当然也会指导我们如何编译源码了,https://source.android.com/source/building-running.html这里就是官方文档了。如果你想做一个合格的程序员,那么养成看官方文档的习惯是很重要的,虽然可能看起来并不是很舒服,但这一定是最权威的。

    选择一个分支

    Android系统从发布到现在已经有了许多个大版本,至于小版本那就更多了,可能已经上百个了,你需要选择一个想要编译的分支。当然了,这一步我们实际上是在下载Android源码的时候就已经决定了,好吧,我这里选择的是Android 5.1.1_r8的分支。

    初始化

    在Android源码的根目录(如/home/username/Android5.1.1_r8)执行

    这里是使用envsetup.sh脚本来初始化环境。可以使用一个点“.”来代替source,这样的话可以节约输入命令的时间,在文档中Google比较推荐用这种更加简洁的方式。

    选择编译目标

    这里使用lunch命令来选择一个编译的目标,所谓的编译目标,其实就是指最终生成的镜像要运行在什么样的设备上,单独输入lunch命令后再按tab键,系统就会显示出一共可以选择哪些设备:

    choose-build-target-device

    其中,aosp代表Android Open Source Project——Android开源工程,实际上各个手机厂家就是利用aosp的代码,自己进行修改适配,其中比较重要的就是各个硬件的驱动的适配,然后再改一改Framework层,写一些自己的应用,就可以变成一个自己的手机“系统”了。第一个aosp_arm64-eng,arm代表这个选项的目标是arm架构的模拟器,64代表64位系统,eng代表engineer版本,也就是开发工程师的版本,包含一些debug的工具,方便调试。后缀为user代表这是可以用来正式发布到市场的版本,权限是被限制的(如没有root,没有debug),而userdebug版本则在user版本的基础上开放了root权限和debug的权限。

    中间的字段,除了arm的,还有x86的——这个就顾名思义了跑在x86模拟器上的,而一些单词则实际上是Nexus设备的代号,如shamu代表了Nexus 6,hammerhead代表了Nexus 5等等。如果你没有这些设备,那么通常选择arm或者x86的模拟器版本,我手中有Nexus 5和6两部手机,而5已经成为我的开发测试机,所以我选择了hammerhead版本。

    lunch-aosp-hammerhead-userdebug

    看得出来,实际上这个lunch命令就是设定了一系列的环境变量。当然,如果你有兴趣的话,可以到build/envsetup.sh脚本里面看看lunch命令到底是怎么回事:

    如果你对shell脚本有一定的了解,那么应该就能看出来lunch命令到底是怎么回事了。

    编译源码

    在GNU中编译源码可以用-jN参数来决定使用多少线程,一般来说,如果你的电脑(或者服务器)是4个核心8个线程的cpu,那么就可以使用make -j16这样的命令来编译。N太小速度会比较慢,N太大远远超过线程数2倍的时候则没什么作用。在这里我的输入是:

    begin-to-build-android-source-code

    这时候,编译就开始了。根据编译环境的性能不同,耗费的时间也是不一样的。一般来说,更先进的CPU、更快更大的内存以及是否有固态硬盘SSD这几个因素会有着决定性的影响。另外,更新的gcc编译器版本会对新一代cpu的指令有着更好的利用,效率会更高。通常Android源码的编译时间需要1个小时以上,如果要花费四五个小时甚至更久的朋友,需要考虑升级一下配置了。

    如果之前的Java以及依赖包的安装比较顺利,那么这个编译过程通常也不会有什么问题。当然,凡事总会有意外,如果出现了什么错误,那就需要具体问题具体分析了。我这里很顺利的编译完成了,一共用了2个小时:

    android-souce-code-compile-complete

     

    http://www.cnblogs.com/zhuixinshaonian/

  • 相关阅读:
    SpringBoot定制修改Servlet容器
    springboot配置i18n
    idea properties编码问题
    多线程分页查询
    浏览器 私有属性&内核
    css添加样式的四种方式
    html、css、js注释
    JS中的 变量提升
    ECMAScript
    NOSCRIPT标签的用处
  • 原文地址:https://www.cnblogs.com/zhuixinshaonian/p/5426420.html
Copyright © 2011-2022 走看看