准备:
可以通过磁盘管理工具进行设置,也可以通过以下命令生成镜像文件
可以通过磁盘管理工具进行设置,也可以通过以下命令生成70g的镜像文件
sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 70g -volname android ~/android.dmg
这里的生成地址写在了根目录,你可以自定义目录
hdiutil convert ~/android.dmg.sparseimage -format UDRW -o ~/android.dmg
以上步骤会在用户根目录生成android.dmg 和 android.dmg.sparseimage 文件;android.dmg.sparseimage文件可以删除。android.dmg可以转移到任何存储介质上和储存位置(Desktop,移动硬盘,u盘。。。)
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
推荐使用清华大学 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 error: Exited sync due to fetch errors
加上 -f
repo sync -f
会挂载到Finder上 android挂载(你可以改名,或者你是别的名字),复制aosp目录到挂载盘上。我这边是直接 把 aosp-latest.tar 文件复制到上面,进行解压,然后repo sync的。没有像上面步骤一样先在别的地方解压然后repo sync 然后复制过来。不过这些都是一样的结果,只要把repo sync后的文件 放在挂载盘上进行下面的编译就行了,前面不管什么步骤都不影响
$ cd /Volumes/android/aosp
$ source build/envsetup.sh
不过我编译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
其他设备可以到这里阅读
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/
这两篇文章
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源码编译问题
在进行下面的步骤之前 希望你看下 安装编译好的Android镜像到模拟器上 (android 7.0)
因为进行下面的步骤会删除掉安装文件(system.img …..文件),需要安装的话要重新make
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
通过如上操作我们就完成了基本的源码配置工作。
大家都知道使用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掉。
有了如上的这些操作以后,我们打开Android Studio,然后选择打开一个现有的Android Studio项目,然后选择打开源码根目录下的android.ipr文件,然后出现如图一样的索引即可等待导入就行:tu
这里写图片描述
到目前为止我们就可以方便的使用Android Studio查看源码啦。如下图所示:
这里写图片描述
上图我们看见了,可以通过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/