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 ~/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
4.双击打开dmg文件
会挂载到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 也会默认设置这些环境变量
所以我怀疑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文件夹,文件夹下:
报错
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源码编译问题
编译成功:
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/
更多相关文章
- Android:反编译查看源码
- Android之怎么操作文件(读写以及保存到sdcard)
- Android中strings.xml文件
- 疯狂Android讲义第三版完整带目录
- Android Studio导入.so库文件方法
- 使用Android Studio对Android系统源码进行单步调试
- Android显示PDF文件之iText
- Android中解析doc、docx、xls、xlsx格式文件