编程设计之Android

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

2019-01-16  本文已影响10人  快乐猿Days

作为一个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 中添加辅助函数:

# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
# 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,大功告成,完成上面的步骤后,公共的类就直接指向系统的源码啦。

上一篇 下一篇

猜你喜欢

热点阅读