因为在工做中遇到了不少关于android内部实现的问题,虽而后面都解决了,有些是看了源码实现,有些源码看不了只能去google,百度。这就致使了对于不少的问题实际上是知其然不知其因此然,因此从如今开始我下定决心开始学习Android的源码。那说到源码就必须提到编译源码这件事情。
最开始是在个人MBP上面安装了linux的双系统准备在ubuntu上面来安装编译源码,不过这个方法有个弊端就是查看源码的过程真是爽翻天啊,因此开始捣鼓再mac上面编译源码php
那么如今开始了:html
Mac OS (Intel/x86)java
Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具备 Xcode 4.5.2 和命令行工具python
Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具备 Xcode 4.5.2 和命令行工具linux
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
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 SDKgit
这里会须要注册一个 甲骨文的帐号github
gmake 后面会下载的,你只须要安装好python2.7 然而通常python是安装好的shell
您可使用磁盘映像在现有的 Mac OS 环境中建立区分大小写的文件系统。要建立磁盘映像,请启动磁盘工具,而后选择“新建映像”。完成编译至少须要 25GB 空间;更大的空间可以更好地知足将来的需求。使用稀疏映像有助于节省空间,并且之后能够随着需求的增长进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。macos
我推荐使用这种方式来创建磁盘映像
您也能够经过 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; }
注意:若是系统建立的是 .dmg.sparseimage 文件,请将 ~/android.dmg 替换成 ~/android.dmg.sparseimage。
要在执行 umountAndroid 时卸载磁盘映像,请运行如下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
装载 android 存储卷后,您将在其中开展全部工做。您能够像对待外接式存储盘同样将其弹出(卸载)。
你只须要在AppStore 里面安装Xcode就能够了。
以后须要运行一下命令
$ xcode-select --install
或者你也能够选择直接运行命令,不过我不推荐,下个xcode有好处的哦
下载连接 根据本身的系统来选择
vi ~/.bash_profile
vi的小提示,按i切换到insert模式就是编辑模式,按esc退出编辑模式,按:wq 保存退出
复制 export PATH=/opt/local/bin:$PATH
到文件中。
输入source ~/.bash_profile
使命令生效
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
若是您使用 Mac OS X v10.4,还须要安装 bison:
POSIXLY_CORRECT=1 sudo port install bison
在 Mac OS 中,可同时打开的文件描述符的默认数量上限过低,在高度并行的编译流程中,可能会超出此上限。要提升此上限,请将下列行添加到 ~/.bash_profile 中:
ulimit -S -n 1024
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
mkdir ~/bin
PATH=~/bin:$PATH
(要在~/.bash_profile中添加;输入source ~/.bash_profile
使命令生效)
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
必须使用以前建立的区分大小写的文件系统,通常挂载的新的盘是在/Volumes/ 路径下的
我分出来的区分大小写的文件系统名字是Android 因此我cd进去就ok了
mkdir XXX
(XXX 是你本身取得名字)cd XXX
若是遇到repo: command not found 问题 请在初始工做目录输入
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
export PATH=$PATH:$HOME/bin
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
repo init -u https://android.googlesource.com/platform/manifest
清华镜像 首先咱们能够看到
2016-06-24 : 关闭 git:// 协议,仅支持 HTTPS
因此咱们是没法使用repo来同步代码的,因此咱们要这么作:
tar xf aosp-latest.tar
解压的目录
cd aosp
repo sync
此后,每次只需运行 repo sync 便可保持同步。 咱们强烈建议您保持天天同步,并尽可能选择凌晨等低峰时间
科大镜像没有去掉git协议,因此咱们能够顺畅的完成下载按照页面提示的操做便可
对于运行带标记的 AOSP 版本分支的受支持设备,您能够从 Google 的 Nexus 驱动程序页面下载相关的官方二进制文件。有了这些二进制文件,您将有权使用采用非开放源代码的其余硬件功能。要编译 AOSP 的 master 分支,请使用 Nexus 设备的二进制文件预览。在针对某种设备编译 master 分支时,请使用适用于最新编号版本的二进制文件或具备最新日期的二进制文件。
sh xxx.sh
运行此处须要agree用户协议,你只须要按住向下键,就能够划到最后输入 I ACCEPT 就能够了。
sh运行完成以后会获得一个vendor文件夹,将其复制到源代码的根目录下
清理
为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用如下命令删除全部之前编译操做的已有输出:make clobber
source build/envsetup.sh
lunch
而后会出现对应的列表选择其中某个数字便可
该命令表示针对模拟器进行完整编译,而且全部调试功能均处于启用状态。
若是您没有提供任何参数就运行命令,lunch 将提示您从菜单中选择一个目标。
全部编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。
BUILDTYPE 是如下类型之一
编译类型 | 使用状况 |
---|---|
user | 权限受限;适用于生产环境 |
userdebug | 与“user”相似,但具备 root 权限和可调试性;是进行调试时的首选编译类型 |
eng | 具备额外调试工具的开发配置 |
aosp_bullhead-userdebug
若是想要针对真机调试,请参阅运行版本进行命令选择。我在这里不建议初次接触源码编译的人进行真机调试,刷砖了就gg了。
您可使用 make 编译任何代码。GNU Make 能够借助 -jN 参数处理并行任务,一般使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每一个 CPU 4 个内核,每一个内核 2 个线程)上,要实现最快的编译速度,可使用介于 make -j16 到 make -j32 之间的命令。
make -j4
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
https://github.com/boxen/our-boxen 根据此处进行更新
经过查看build/core/combo/mac_version.mk文件咱们能够看到
mac_sdk_versions_supported := 10.8 10.9 10.10 10.11
而我电脑是10.12版本的因此我加了个10.12在这句话以后 就能够了
咱们须要下载一个MacOSX10.11.sdk放到这个目录中。 ReleasePage由于10.12这个版本的sdk中syscall这个方法被弃用了,因此咱们须要换回11这个版本的sdk
- could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/../lib/tools.jar, please check if your JDK was installed correctly. Stop.
在~/.bash_profile 中添加export ANDROID_JAVA_HOME=$JAVA_HOME
咱们须要下载一个MacOSX10.11.sdk解压后放到这个目录中Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
应该是jdk版本不对 你须要查看你在安装过程当中哪里使用了1.7版本的jdk 能够经过查看
java -version
和javac -version
来查看
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
修改文件 prebuilts/sdk/tools/jack-admin 修改这个语句加上
-Xmx4096m
---->JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
https://blog.csdn.net/xljxiang/article/details/83044067
unset NDK_ROOT
终于build完成了 真是历经千幸万苦啊。
首先第一步 在源代码的更目录下输入
sudo adb reboot bootloader
(若是发现没有成功请从新输入6.1和6.2的步骤)
而后你就会到达这个界面
fastboot oem unlock
输入这个命令 而后经过音量键选择yes 经过待机键确认
再而后输入
fastboot flashall -w
export ANDROID_PRODUCT_OUT=/Volumes/android/android-7.1.1_r24/out/target/product/generic
(请替换你本身的目录)
你会发现没有boot.img 这个文件 这时候你只须要
make bootimage
就会生成对应的文件