mac 上的android源码下载编译查看

mac 上的android源码下载编译

准备:

一. Mac OS X(10.9.2)编译环境设置

1. 创建大小写敏感的磁盘镜像

可以通过磁盘管理工具进行设置,也可以通过以下命令生成镜像文件

1.1 创建大小写敏感的磁盘镜像

可以通过磁盘管理工具进行设置,也可以通过以下命令生成70g的镜像文件

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

这里的生成地址写在了根目录,你可以自定义目录

1.2 将镜像文件转为可读写磁盘

hdiutil convert ~/android.dmg.sparseimage -format UDRW -o ~/android.dmg

以上步骤会在用户根目录生成android.dmg 和 android.dmg.sparseimage 文件;android.dmg.sparseimage文件可以删除。android.dmg可以转移到任何存储介质上和储存位置(Desktop,移动硬盘,u盘。。。)

2.repo 工具准备

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

3.下载源码

推荐使用清华大学 TUNA 镜像源,使用每月更新的初始化包进行下载更新。

由于首次同步需要下载 24GB 数据,过程中任何网络故障都可能造成同步失败,我们强烈建议您使用初始化包进行初始化。

下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。

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

使用方法如下:

wget 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 如果出现问题

repo sync error: Exited sync due to fetch errors

解决:

加上 -f
repo sync -f

mac 上的android源码下载编译查看_第1张图片

4.双击打开dmg文件

mac 上的android源码下载编译查看_第2张图片

会挂载到Finder上 android挂载(你可以改名,或者你是别的名字),复制aosp目录到挂载盘上。我这边是直接 把 aosp-latest.tar 文件复制到上面,进行解压,然后repo sync的。没有像上面步骤一样先在别的地方解压然后repo sync 然后复制过来。不过这些都是一样的结果,只要把repo sync后的文件 放在挂载盘上进行下面的编译就行了,前面不管什么步骤都不影响

5.编译android

$ cd /Volumes/android/aosp

5.1.设置环境

$ source build/envsetup.sh

5.2..根据设备选择target

不过我编译7.0 的源码好像默认可以不用lunch,我用lunch命令一直不对,根目录没有vendor路径;我在参考 Android编译系统环境初始化过程分析
时候发现最终lunch会设置一些环境变量

Which would you like? [full-eng] 1  

============================================  
PLATFORM_VERSION_CODENAME=REL  
PLATFORM_VERSION=4.2  
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.8.0-31-generic-x86_64-with-Ubuntu-13.04-raring  
HOST_BUILD_TYPE=release  
BUILD_ID=JOP40C  
OUT_DIR=out  
============================================  

可是我在编译7.0时候,不做lunch 直接make 也会默认设置这些环境变量

mac 上的android源码下载编译查看_第3张图片

所以我怀疑7.0是不需要lunch(如果你不需要自己设置厂商信息),制作自己的Vendor

$ lunch

注:target有以下可选:

     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. aosp_deb-userdebug
     8. aosp_flo-userdebug
     9. full_fugu-userdebug
     10. aosp_fugu-userdebug
     11. mini_emulator_arm64-userdebug
     12. m_e_arm-userdebug
     13. mini_emulator_mips-userdebug
     14. mini_emulator_x86-userdebug
     15. mini_emulator_x86_64-userdebug
     16. aosp_flounder-userdebug
     17. aosp_angler-userdebug
     18. aosp_bullhead-userdebug
     19. aosp_hammerhead-userdebug
     20. aosp_hammerhead_fp-userdebug
     21. aosp_shamu-userdebug

其他设备可以到这里阅读

5.2.1 可能出现一下问题

find: vendor: No such file or directory
-bash: Saving: command not found
-bash: ...saving: command not found
-bash: ...completed.: command not found

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

原因:根目录缺少vendor目录文件
vendor中存放着手机厂商信息还有驱动之类的东西
解决:参考http://blog.csdn.net/zmnqazqaz/article/details/37559177
http://www.liball.me/mac-10-10-build-android-4-4-4-for-nexus/
这两篇文章

5.3 编译

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

android目录底下会生成out文件夹,文件夹下:

mac 上的android源码下载编译查看_第4张图片

报错
Error: 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文件中指定ANDROID_JAVA_HOME为JDK路径即可。
export ANDROID_JAVA_HOME=${JAVA_HOME}

make过程中产生的其他问题: android源码编译问题

编译成功:

mac 上的android源码下载编译查看_第5张图片

6.利用android studio 查看Android源码

在进行下面的步骤之前 希望你看下 安装编译好的Android镜像到模拟器上 (android 7.0)
因为进行下面的步骤会删除掉安装文件(system.img …..文件),需要安装的话要重新make

6.1 编译源码idegen模块及生成AS配置文件(*.ipr)

mmm development/tools/idegen/

这行命令的意思是编译idegen这个模块项目,然后生成idegen.jar文件(不信你自己去查看这个模块的Android.mk的目标吧,不多解释)。运行完以后如果看到如下信息则说明编译OK:

......
#### make completed successfully (7 seconds) ####

接着执行如下脚本:

development/tools/idegen/idegen.sh

这行命令的意思是在根目录生成对应的android.ipr、android.iml IEDA工程配置文件。等待片刻得到类似如下信息说明OK:

Read excludes: 21ms
Traversed tree: 194799ms

通过如上操作我们就完成了基本的源码配置工作。

6.2导入Android Studio前的一些客户化操作

大家都知道使用Eclipse倒入源码很慢,Android Studio导入源码时也慢,所以建议修改android.iml文件(将自己不用的代码去掉),然后再导入Studio。

就像下面摘取的android.iml文件1887行开始的这些一样:

<sourceFolder url="file://$MODULE_DIR$/./sdk/testapps/userLibTest/src" isTestSource="true"/>
<sourceFolder url="file://$MODULE_DIR$/./tools/external/fat32lib/src/main/java" isTestSource="false"/>
"file://$MODULE_DIR$/out/eclipse"/>
"file://$MODULE_DIR$/.repo"/>
"file://$MODULE_DIR$/external/bluetooth"/>
"file://$MODULE_DIR$/external/chromium"/>
"file://$MODULE_DIR$/external/icu4c"/>
"file://$MODULE_DIR$/external/webkit"/>
"file://$MODULE_DIR$/frameworks/base/docs"/>
"file://$MODULE_DIR$/out/host"/>
"file://$MODULE_DIR$/out/target/common/docs"/>
"file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
"file://$MODULE_DIR$/out/target/product"/>
"file://$MODULE_DIR$/prebuilt"/>

我们可以仿照上面这段代码的写法一样过滤掉不需要的内容,这样在导入时就会快很多。

也可以通过Android Studio的Project Stucture 打开左侧Modules,然后将右侧Sources中一些目录Excluded掉。

6.3使用Android Studio导入源码工程

有了如上的这些操作以后,我们打开Android Studio,然后选择打开一个现有的Android Studio项目,然后选择打开源码根目录下的android.ipr文件,然后出现如图一样的索引即可等待导入就行:tu

这里写图片描述

到目前为止我们就可以方便的使用Android Studio查看源码啦。如下图所示:

这里写图片描述

6.4去掉系统配置jar

上图我们看见了,可以通过Android Studio搜索整套源码的代码了。但是这时候如果你打开一个Service.java类,然后把鼠标放在其中任意方法的Intent参数上按住CTRL+鼠标左键跳转到Intent类你会发现跳转过去的是一个Intent.class文件,为啥呢?因为他跳转的是你的默认SDK中的jar内部的class文件。既然要修改查看整套源码,这么跳转得多蛋疼啊,所以我们需要配置让其能跳转到Intent.java文件,具体做法如下:

首先删掉依赖中的所有依赖,只保留下图中没被选中的那两个(当然你可以选择保留一些你用到的其他jar),如下

接着点击加号的JARs or directories将你源码的frameworks及external和你用到的其他跳转目录添加到依赖中,然后apply即可。

这时候我们在像上面一样打开Service.java跳转Intent,你会发现像下图一样直接跳转到你源码路径下的Intent.java文件了,如下:

感谢

http://blog.csdn.net/bulreed/article/details/22783467
http://blog.csdn.net/yanbober/article/details/48846331
http://www.cnblogs.com/ryanchi/p/5682186.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

你可能感兴趣的:(android)