美文网首页
Android源码下载和编译

Android源码下载和编译

作者: 快把节操捡起来 | 来源:发表于2016-07-15 16:08 被阅读0次

    搭建开发环境

    Android Jelly Bean的编译依赖Sun JDK 1.6,所以首先需要安装JDK 1.6。

    • 下载JDK 1.6

    在oracle官网上下载 jdk-6u45-linux-x64.bin
    下载地址

    • 安装JDK 1.6:
    $ sudo ./jdk-6u45-linux-x64.bin
    $ sudo cp jdk1.6.0_45 /usr/local
    
    • 配置java及环境变量

    ** 配置环境变量
    在启动终端并输入

    edit /etc/profile

    在末尾添加一下配置,保存并退出

    #set jdk environment  
    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21  
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH  
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH  
    

    终端输入一下命令使配置生效

    source /etc/profile

    update-alternatives配置java

    $ sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.6.0_45/bin/java 100
    $ sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.6.0_45/bin/javac 100
    $ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/local/jdk1.6.0_45/bin/javadoc 100
    
    • 安装必须的开发包
    $sudo apt-get install git-core gnupg flex bison gperf build-essential \
      zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
      libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
      libgl1-mesa-dev gcc-4.4 gcc-4.4-multilib  mingw32  tofrodos \
      python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
      u-boot-tools openssh-client libswitch-perl g++-4.4 g++-4.4-multilib \
      cksfv uuid-dev:i386 liblzo2-dev:i386
    

    如果想要了解上述安装包的作用,可以到Ubuntu网站查询。

    • 配置gcc 4.4和g++ 4.4
    $sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
    $sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
    $sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
    $sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
    $sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
    $sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.8 50 
    

    下载Android上层系统源代码

    Android源代码分成两部分,其中Kernel部分需要单独下载。这里先给出上层系统源码的下载流程。该部分可以参考Android官网

    • 建立repo工作目录
    $ mkdir ~/bin
    
    • 下载repo脚本
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
    
    • 建立Android源码目录
    $ mkdir -p ~/android/jellybean
    $ cd ~/android/jellybean
    
    • 配置用户名和邮箱(可选)
    $ git config --global user.name "Your Name"
    $ git config --global user.email "you@example.com"
    

    该步骤只有在使用Gerrit工具进行review-code提交代码时才会用到,可以在初始化repo之后用repo init --config-name进行修改。

    • 初始化repo
    ~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r3
    

    其中,-u为源码的git服务器地址,-b为源码的分支。分支列表可以查看Android官网,或者利用git ls-remote指令查看:

    $ git ls-remote --tags https://android.googlesource.com/platform/manifest
    

    如果没有指定分支,将会下载Android主线上最新的源代码。

    • 下载Android源码

    初始化repo之后,如果需要下载Android源码,只需要进入源码根目录,然后在终端执行一下命令:

    ~/bin/repo sync
    

    Android全部源码十分庞大,如果只需要下载部分源码,可以单独指定模块名称。

    查看Android源码中所有的模块:

    ~/bin/repo manifest -o-
    

    执行后显示的信息。

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      <remote fetch=".." name="aosp"/>
      
      <default remote="aosp" revision="refs/tags/android-4.1.1_r3" sync-j="4"/>
      
      <project name="device/asus/grouper"/>
      <project name="device/common"/>
      <project name="device/generic/armv7-a"/>
      <project name="device/generic/armv7-a-neon"/>
      <project name="device/generic/goldfish"/>
      <project name="device/google/accessory/arduino"/>
      <project name="device/google/accessory/demokit"/>
      <project name="device/moto/common"/>
      <project name="device/moto/stingray"/>
      <project name="device/moto/wingray"/>
      <project name="device/sample"/>
      <project name="device/samsung/crespo"/>
      <project name="device/samsung/crespo4g"/>
      <project name="device/samsung/maguro"/>
      <project name="device/samsung/toro"/>
      <project name="device/samsung/torospr"/>
      <project name="device/samsung/tuna"/>
      <project name="device/ti/panda"/>
      <project name="platform/abi/cpp" path="abi/cpp"/>
      <project name="platform/bionic" path="bionic"/>
      <project name="platform/bootable/bootloader/legacy" path="bootable/bootloader/legacy"/>
      <project name="platform/bootable/diskinstaller" path="bootable/diskinstaller"/>
      <project name="platform/bootable/recovery" path="bootable/recovery"/>
      <project name="platform/build" path="build">
        <copyfile dest="Makefile" src="core/root.mk"/>
      </project>
      <project name="platform/cts" path="cts"/>
      <project name="platform/dalvik" path="dalvik"/>
      <!-- Some lines are omitted -->
    </manifest>
    

    其中,name表示项目模块的名称以及在源码服务器上的相对路径。如果需要下载某个特定的模块,只需要执行~/bin/repo sync [name]

    path表示项目的本地路径。本地路径也可以通过查看本地源码根目录下.repo/manifests/default.xml文件得到。

    下载Android Linux Kernel源码

    • 进入Android源码根目录
    $ cd ~/android/jellybean
    $ mkdir kernel
    $ cd kernel
    
    • 下载Kernel源码
      Kernel部分的源码可以直接通过git工具下载
    $ git clone https://android.googlesource.com/kernel/common.git
    

    由于Kernel源码是与硬件平台相关的,因此在下载时需要指定平台类型。也就是说,可以将该调指令中的common替换为sumsung, tegra等。

    • 切换到kernel 3.0分支
      由于Android JellyBean使用的是Linux 3.10内核,因此需要切换到Kernel 3.10分支。
    $ cd common
    $ git branch -a
    $ git checkout remotes/origin/Android-3.10
    

    编译Android上传系统源码

    • 导入预设脚本
    ~/android/jellybean $ source build/envsetup.sh
    
    • 指定产品名和编译变量
    ~/android/jellybean $ lunch
    
    You're building on Linux
    Lunch menu... pick a combo:
         1. full-eng
         2. full_x86-eng
         3. vbox_x86-eng
         4. full_grouper-userdebug
         5. mini_armv7a_neon-userdebug
         6. mini_armv7a-userdebug
         7. full_wingray-userdebug
         8. full_crespo-userdebug
         9. full_maguro-userdebug
         10. full_panda-userdebug
    
    Which would you like? [full-eng] 1
    
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=4.1.1
    TARGET_PRODUCT=full
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-3.13.0-86-generic-x86_64-with-Ubuntu-14.04-trusty
    HOST_BUILD_TYPE=release
    BUILD_ID=JRO03H
    OUT_DIR=out
    ============================================
    

    lunch是envsetup.sh中提供的函数,负责设置环境变量。full表示完全编译,eng表示工程版。full-eng对应模拟器设备。

    • 编译源码
      ** 编译全部源码
    ~/android/jellybean $ make
    

    ** 编译指定模块源码

    1. make模块名
      这种方法适合第一次编译,会把依赖模块一并编译。对于应用层源码模块,需要查看Android.mk中的LOCAL_PACKGAGE_NAME变量;对于框架层和系统运行库模块,需要查看Android.mk中的LOCAL_MODULE变量。
    2. mmm命令
      该命令是envsetup.sh中注册的函数,用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。
    3. mm命令
      该命令是envsetup.sh中注册的函数,用于在模块目录下编译模块。只能在第一次编译后使用。

    相关文章

      网友评论

          本文标题:Android源码下载和编译

          本文链接:https://www.haomeiwen.com/subject/cpdyjttx.html