美文网首页android源码Android源码
Mac下载并编译Android源码

Mac下载并编译Android源码

作者: Haraway | 来源:发表于2017-05-09 11:27 被阅读147次

    一、准备环境

    在Mac下编译Android的源代码需要一个大小写敏感(Case Sensitive)的分区格式。

    官方指南:https://source.android.com/source/requirements

    1,大小写敏感的磁盘分区

    如果你原来的分区不是HFS一类大小写敏感的文件格式,那么最简单的办法就是新建一个这种分区格式的dmg出来,命令如下:

    hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg
    

    最好保证100g的空间,我最后占用空间74.06G。

    android.dmg 根据自己实际情况写存放的位置,可放在移动硬盘下。

    双击android.dmg.sparseimage,mount volume到/Volumes/android。

    2,挂载和卸载android.dmg文件

    hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android
    
    hdiutil detach /Volumes/android
    

    3,补充1:如果你镜像创建完毕,想改变镜像大小,可以执行下面代码:

    hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
    

    4,补充2:你可以为bash添加function,以便快速挂载和卸载android.dmg文件。但如果和我一样偷懒镜像文件直接放桌面,则可以省略这一步,直接从桌面装载镜像就行。

    # mount the android file image
    function mountAndroid { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; }
    # unmount the android file image
    function umountAndroid() { hdiutil detach /Volumes/android; }
    

    二、源码下载

    官方下载教程:http://source.android.com/source/downloading.html
      建议使用:清华镜像

    1,下载repo

    下载Repo之前,需要创建一个bin文件,并且将路径写入到path中:

    mkdir ~/bin
    PATH=~/bin:$PATH
    

    然后在命令行中输入下面的命令,下载Repo,并且修改属性:

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

    可以将Repo中的下载地址改为清华大学tuna镜像源,这样就不用挂着VPN下载了。编辑Repo,修改REPO_URL后的地址:

    REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
    
    image-02.png

    2,下载源码

    创建源码目录:

    mkdir android-5.1.0
    cd android-5.1.0
    

    根据你的Nexus设备,选择代码分支:Source Code Tags and Builds。执行repo init

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.0_r1
    
    image-03.png

    完成后,执行下面的命令

    repo sync
    

    由于下载源码的时间太长,中途可能会出现中断情况,虽然repo同步是支持断点续传,但是不知道什么时候会断开,这一点很麻烦,所以可以写一个shell脚本来开启同步。

    可以打开sublime text命名新建一个aospdown.sh,然后拷贝到android-5.1.0,运行./aospdown.sh,等待下载

    #!/bin/bash
    PATH=~/bin:$PATH
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.0_r1
    repo sync
    while [ $? = 1 ]; do
    echo "================sync failed, re-sync again ====="
    sleep 3
    repo sync
    done
    

    下载完成后可以,完成后可以删除.repo/文件

    rm -rf .repo/
    

    三、源码编译

    1,初始化编译环境:source build/envsetup.sh

    MacBook-Pro:android xp$ source build/envsetup.sh
    including device/asus/fugu/vendorsetup.sh
    including device/generic/mini-emulator-arm64/vendorsetup.sh
    including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
    including device/generic/mini-emulator-mips/vendorsetup.sh
    including device/generic/mini-emulator-mips64/vendorsetup.sh
    including device/generic/mini-emulator-x86/vendorsetup.sh
    including device/generic/mini-emulator-x86_64/vendorsetup.sh
    including device/google/dragon/vendorsetup.sh
    including device/google/marlin/vendorsetup.sh
    including device/htc/flounder/vendorsetup.sh
    including device/huawei/angler/vendorsetup.sh
    including device/lge/bullhead/vendorsetup.sh
    including device/linaro/hikey/vendorsetup.sh
    including device/moto/shamu/vendorsetup.sh
    including sdk/bash_completion/adb.bash
    

    2,根据设备选择target:lunch

    MacBook-Pro:android xp$ lunch
    
    You're building on Darwin
    
    Lunch menu... pick a combo:
         1. aosp_arm-eng
         2. aosp_arm64-eng
         3. aosp_mips-eng
         4. aosp_mips64-eng
         5. aosp_x86-eng
         6. aosp_x86_64-eng
         7. full_fugu-userdebug
         8. aosp_fugu-userdebug
         9. mini_emulator_arm64-userdebug
         10. m_e_arm-userdebug
         11. m_e_mips-userdebug
         12. m_e_mips64-eng
         13. mini_emulator_x86-userdebug
         14. mini_emulator_x86_64-userdebug
         15. aosp_dragon-userdebug
         16. aosp_dragon-eng
         17. aosp_marlin-userdebug
         18. aosp_sailfish-userdebug
         19. aosp_flounder-userdebug
         20. aosp_angler-userdebug
         21. aosp_bullhead-userdebug
         22. hikey-userdebug
         23. aosp_shamu-userdebug
    
    Which would you like? [aosp_arm-eng]
    

    我的是Nexus 5,所以选择19就可以了。其他设备可以到这里查阅。

    3,编译

    make -j8
    

    -jN,N这个数字可以跟你的CPU实际情况而定。

    至于N写多少,引用下面一段话:

    参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make -j8.

    四、运行模拟器

    在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:

    source build/envsetup.sh
    lunch(选择刚才你设置的目标版本,比如这里了我选择的是19)
    emulator
    

    如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行虚拟机:

    emulator
    

    补充一、Mac OX 配置JDK环境变量

    在windows里面配置JDK环境变量很容易,但是如果要在Mac里面配置JDK环境变量和windows里面有所不同,具体如下:

    1,Mac OS里面自带jdk,不过是1.7的版本(本人Mac OS 10.11.6 ),如需要1.8则可以去 oracle的官网下载最新的对应的jdk版本,网址如下:

    http://www.oracle.com/technetwork/Java/javase/downloads/index-jsp-138363.html

    下载完以后安装,此时我有个疑问,系统自带的jdk在什么地方?我下载的jdk又在什么地方呢?

    mac系统自带的jdk的安装目录在如下目录:

    /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home ;

    在mac系统里面jdk的路径是要到Home这里的,所以我们在后面配置环境变量的时候一点要记住选择到home这个文件这里。

    我们自己安装的jdk的目录一般在:

    /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home 下;

    也就是到Library这个目录下面去找应该就可以找到。

    找到路径以后就是如何配置环境变量的问题。

    2,配置环境变量步骤如下:

    需要修改两个文件
      第一个文件 .bash_profile ,使用如下命令修改:

    cd ~ //进入到 ~ 目录
    
    touch .bash_profile  //修改.bash_profile文件
    
    vi .bash_profile  //使用vi编辑器编辑 .bash_profile文件
    
    i   //,在vi编辑器里面输入 i  的意思是开始编辑。
    

    vi编辑器里面的内容如下:

    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    
    CLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    PATH=$JAVA_HOME/bin:$PATH:
    
    export JAVA_HOME
    
    export CLASSPATH
    
    export PATH
    

    添加如上所示的语句就可以了,第一行代表的是jdk的路径,一定要记住选择到 Home 这个文件加下面;

    然后退出vi编辑器使用如下命令:

    1. 输入 esc (退出编辑模式)
      2. 输入冒号 : wq (保存并退出)或 :wq!(强制保存退出)
      3. 保存退出

    如果以上修改完毕切正确,那么接下来就是让配置的环境变量生效,使用如下命令:

    source .bash_profile  
    

    或者可以直接重新启动机器,注销机器都可以。

    完毕以后查看下当前的java 版本是否正确输入如下命令:
    java -version

    MacBook-Pro:~ xp$ java -version
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
    

    如果出现了上面所示的对应的自己的安装的版本那就说明没有问题了,或者使用如下命令查看环境变量是否已经配置成功:

      echo $JAVA_HOME
    

    如下所示:

    MacBook-Pro:~ xp$ echo $JAVA_HOME
    /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    

    显示已经配置成功,如果查看java的版本正确,但是查看是jdk环境变量配置失败,重新打开terminal 查看,前面打开的 终端 可能显示不正确,我的就是如此。

    补充二、退出后再次编译笔记

    MacBook-Pro:~ xp$ cd /volumes
    MacBook-Pro:volumes xp$ cd android
    -bash: cd: android: No such file or directory
    MacBook-Pro:volumes xp$ ls
    Macintosh HD    MobileBackups
    

    此时双击android.dmg.sparseimage,再执行以下命令:

    MacBook-Pro:volumes xp$ ls
    Macintosh HD    MobileBackups   untitled
    MacBook-Pro:volumes xp$ cd untitled
    MacBook-Pro:untitled xp$ ls
    android
    MacBook-Pro:untitled xp$ cd android
    MacBook-Pro:android xp$ cd ..
    MacBook-Pro:androidsrc xp$ ls
    android
    MacBook-Pro:androidsrc xp$ cd android
    
    MacBook-Pro:android xp$ hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/androidsrc
    /dev/disk2              GUID_partition_scheme           
    /dev/disk2s1            EFI                             
    /dev/disk2s2            Apple_HFS                       /Volumes/androidsrc
    MacBook-Pro:android xp$ make -j16
    ============================================
    PLATFORM_VERSION_CODENAME=O
    PLATFORM_VERSION=O
    TARGET_PRODUCT=aosp_arm
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a
    TARGET_CPU_VARIANT=generic
    HOST_ARCH=x86_64
    HOST_2ND_ARCH=x86
    HOST_OS=darwin
    HOST_OS_EXTRA=Darwin-15.6.0-x86_64-i386-64bit
    HOST_BUILD_TYPE=release
    BUILD_ID=NYC
    OUT_DIR=out
    ============================================
    

    补充三、下载驱动

    这里下载对应的驱动文件到源码目录,下载完成后解压,会发现三个sh文件,依次执行,例如:

    $ ./extract-broadcom-hammerhead.shThe license for this software will now be displayed.You must agree to this license before using this software.Press Enter to view the licensels
    

    回车后查看license,翻到license最后,输入I ACCEPT后回车,这时会将驱动文件释放到vendor目录。依次将驱动搞定之后,按照前面的步骤再次编译。

    补充四、刷机

    又折腾了一遍之后,我们再次fastboot刷刷刷。

    手机连上电脑的情况下

    adb reboot bootloader
    

    cd 到源码编译输出的目录

    fastboot -w flashall
    

    刷完收工,进入全新的Android吧。

    编译源码遇到的问题:

    执行lunch命令的时候,弹出Can not find SDK 10.6错误

    build/core/combo/mac_version.mk:38: *****************************************************
    build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
    build/core/combo/mac_version.mk:40: *****************************************************
    build/core/combo/mac_version.mk:41: *** Stop.. Stop.

    ** Don't have a product spec for: 'aosp_hammerhead'
    ** Do you have the right repo manifest?

    产生这个错误的原因是,在编译脚本中会检查当前的Xcode sdk的版本是否是兼容的,这可能是因为你mac上的xcode版本比较新,在Android源代码中还没有添加上.理论上说应该用Android代码对应的Xcode SDK版本来编译,不然可能会有兼容性的问题。

    解决办法:
    command+shift 进入:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
    查看sdk版本号,本人为10.11.
    输入:
    vi build/core/combo/mac_version.mk
    //找到mac_sdk_versions_supported
    mac_sdk_versions_supported := 10.6 10.7 10.8
    //将上面这行换成
    mac_sdk_versions_supported := 10.11
    //就是换一下支持的sdk版本号。

    参考
    http://www.cnblogs.com/iOS-mt/p/5726380.html
    https://source.android.com/source/index.html
    http://www.mobile-open.com/2016/974155.html
    http://yajin167.info/2016/11/18/mac-toss-about-android-source.html
    http://blog.csdn.net/u010232308/article/details/53978556
    自己动手编译Android源码(超详细):
    http://www.jianshu.com/p/367f0886e62b

    相关文章

      网友评论

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

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