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 ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod 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.tarcd 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: 21msTraversed 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/

更多相关文章

  1. Android:反编译查看源码
  2. Android之怎么操作文件(读写以及保存到sdcard)
  3. Android中strings.xml文件
  4. 疯狂Android讲义第三版完整带目录
  5. Android Studio导入.so库文件方法
  6. 使用Android Studio对Android系统源码进行单步调试
  7. Android显示PDF文件之iText
  8. Android中解析doc、docx、xls、xlsx格式文件

随机推荐

  1. android 自动弹出软件盘
  2. 《android ScrollView嵌套RecycleView滑
  3. android调用系统邮件发送图片文本
  4. android实现屏幕全屏
  5. 使用internal(com.android.internal)和hidd
  6. android ImageButton显示本地图片
  7. Android 图像系列: 将本地图片加载到Draw
  8. android 读取json数据(遍历JSONObject和JS
  9. Android出现:java.lang.NoClassDefFoundEr
  10. cocos js android 添加视频循环播放