美文网首页编程设计之Android
Android源码:Mac下载及编译Android源码(支持移动

Android源码:Mac下载及编译Android源码(支持移动

作者: 快乐猿Days | 来源:发表于2019-01-16 00:54 被阅读10次

    作为一个android开发从业者,如果我们想不停的进度,没有android源码怎么能行呢!众所周知,Android开放源代码master分支历来都是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,但您也可以使用其他 Ubuntu 分发版本。下面我们就在Mac上下载和编译源码。

    参考链接(官方):

    环境:http://source.android.com/source/initializing.html
    下载:http://source.android.com/source/downloading.html 编译:http://source.android.com/source/building-running.html

    系统要求

    Mac OS (Intel/x86)

    Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具

    Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具

    Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)

    Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK

    JDK

    有关较低 Android 版本的预编译路径和安装说明,请参阅安装 JDK。

    Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本

    Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg

    Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6

    Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5

    Make

    Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误。

    主要软件包

    python.org 中提供的 Python 2.6 - 2.7

    gnu.org 中提供的 GNU Make 3.81 - 3.82

    git-scm.com 中提供的 Git 1.7 或更高版本

    创建磁盘映像

    我们可以直接在电脑磁盘上创建映像也可以在移动硬盘上,但是如果是校验代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译或使用 ccache,则需要更多空间。在Mac上的磁盘那么贵的前提下,我建议还是使用移动硬盘吧!

    您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。

    image

    您也可以通过 shell 使用以下命令创建磁盘映像:

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

    这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。
    如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:

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

    对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.bash_profile 中添加辅助函数:

    • 要在执行 mountAndroid 时装载磁盘映像,请运行以下命令:
    # mount the android file image
    function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
    
    • 要在执行 umountAndroid 时卸载磁盘映像,请运行以下命令:
    # unmount the android file image
    function umountAndroid() { hdiutil detach /Volumes/android; }
    

    装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

    安装所需程序包

    可以参照官方文档安装就是。

    设置文件描述符数量上限

    在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

    要提高此上限,请将下列行添加到 ~/.bash_profile 中:

    # set the number of open files to be 1024
    ulimit -S -n 1024
    

    安装 Repo

    要安装 Repo,请执行以下操作:

    确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:

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

    下载 Repo 工具,并确保它可执行:

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

    初始化 Repo 客户端

    必须使用之前创建的区分大小写的文件系统,一般挂载的新的盘是在/Volumes/ 路径下的

    我分出来的区分大小写的文件系统名字是android 所以我cd进去就ok了

    1. 创建一个目录 mkdir XXX (XXX 是你自己取得名字)
      cd XXX

    2. 配置git信息

    git config --global user.name "Your Name" 
    git config --global user.email "you@example.com"
    
    1. 运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。
    repo init -u https://android.googlesource.com/platform/manifest
    

    如果遇到repo: command not found 问题 请在初始工作目录输入

    echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc 
    export PATH=$PATH:$HOME/bin
    

    第三步过程中可以通过梯子下载,由于首次更新非常大,可以使用国内镜像下载。

    由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

    使用方法如下:

    wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
    tar xf aosp-latest.tar
    cd AOSP   # 解压得到的 AOSP 工程目录
    # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
    repo sync # 正常同步一遍即可得到完整目录
    # 或 repo sync -l 仅checkout代码
    

    此后,每次只需运行 repo sync 即可保持同步。 强烈建议您保持每天同步,并尽量选择凌晨等低峰时间

    Android Studio导入Android源码

    在AS的bin目录下,打开studio64.vmoptions文件,修改成如下数值:

    -Xms1024m
    -Xmx1024m
    
    生成AS项目配置文件

    1、首先全局编译一次。
    2、查看out/host/linux-x86/framework/idegen.jar是否存在;
    若已不存在,先执行下面命令以生成它:

    source build/envsetup.sh
    lunch [选择刚全局编译时的参数]
    mmm development/tools/idegen/
    

    3、执行以下命令以生成所需配置文件。

    development/tools/idegen/idegen.sh
    
    导入系统源代码至AS

    1、此时在根目录下,就已经生成了android.ipr、android.iml,可以将整个源代码导入AS。
    2、(可选)设置模块过滤
    有些不想导入AS的模块,可以通过在android.iml中加入excludeFolder,达到过滤效果。

    <excludeFolder url="file://$MODULE_DIR$/.repo"/>
    <excludeFolder url="file://$MODULE_DIR$/abi"/>
    <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
    <excludeFolder url="file://$MODULE_DIR$/art"/>
    <excludeFolder url="file://$MODULE_DIR$/bionic"/>
    <excludeFolder url="file://$MODULE_DIR$/bootable"/>
    <excludeFolder url="file://$MODULE_DIR$/out"/>
    <excludeFolder url="file://$MODULE_DIR$/pdk"/>
    <excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
    <excludeFolder url="file://$MODULE_DIR$/sdk"/>
    <excludeFolder url="file://$MODULE_DIR$/system"/>
    <excludeFolder url="file://$MODULE_DIR$/tools"/>
    <excludeFolder url="file://$MODULE_DIR$/trusty"/>
    <excludeFolder url="file://$MODULE_DIR$/vendor"/>
    ...
    

    第一次导入时间有点长,耐心等待。

    取消默认JDK和SDK依赖

       我们导入完源码后,我们就可以查看整个系统的源码啦,但是我们在跳转公共的类时,并没有跳转到frameworks目录下对应的源码类,而是jar包中的类,这不是我们想要的,我们需要让其跳转到相应的类中。我们就需要新建一个没有任何jar库的SDK给到系统源码项目的依赖。 
    

    那我们要怎么创建一个没有jar的SDK呢?步骤如下:

    1. 右键项目名->Open Module Settings->Project->New(JDK)
      然后选择SDKs->新建一个jdk->删除Classpath目录下的所有包并命名为1.8(No Libraries) 如下图所示:


      屏幕快照 2019-01-16 上午3.53.22.png
    2. 选中Modules->Source->Excluded添加过滤,如下图:


      屏幕快照 2019-01-16 上午4.13.17.png
    3. 再选择Modules->Module SDK选择对应的api版本,并删除下面所有依赖包->然后通过"JARs or directores"依次只添加frameWork和external。

    最后点击apply->ok,大功告成,完成上面的步骤后,公共的类就直接指向系统的源码啦。

    相关文章

      网友评论

        本文标题:Android源码:Mac下载及编译Android源码(支持移动

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