最近尝试下载并编译Android的源码,过程比较曲折,所以特别的记录一下。
  环境
  mac系统:OS X EI Captian 10.11.6
  Android源码:Android 7.0
  JDK: jdk 1.8.0_77
  
  下载源码
  step1:因为我的mac硬盘空间比较小,所以我直接在移动硬盘上操作的,如果mac的空间够大也可以在内置硬盘操作。由于mac文件系统模式默认是不区分大小写的,但是AOSP托管在git上是区分大小写的,所以这里我们需要创建一个镜像。具体操作如下:
  方法一:使用命令行(AOSP目前比较大,建议至少预留80G+的空间):
  

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g /Volumes/aosp/android.dmg

  生成镜像的位置是可以自己定义的,我这里是放在了移动硬盘中。如果需要更大的磁盘空间,可以用下面的命令行来改变磁盘镜像的大小:

hdiutil resize -size <new-size-you-want>g /Volumes/aosp/android.dmg

  方法二:使用mac自带的磁盘工具,选择New Image,分配至少80G大小的空间;保证选择格式为OSX 扩展(区分大小写,日志式)的卷。一定要选区分大小写,日志式
  
  
  这时在/Volumes/aosp/下会生成一个android.dmg的镜像,双击这个镜像,将其挂载。这样在mac Finder中就可以看到我们刚刚的创建的镜像了。

  Step2 Mac 系统下默认只能同时打开 1024 个文件,而在进行 Android 源码编译时有可能会超出这个限制,因此需要解除这个限制。在~/.bash_profile中添加以下内容:

# set the number of open files to be 1024ulimit -S -n 1024

  Step3 安装repo及同步AOSP源码
  

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

  由于众所周知的原因,我们如果直接使用官方下载会非常的困难,那么我们可以考虑使用国内的源,比较好用的就是清华镜像。按照清华源的步骤去同步就可以了:
  

cd  /Volumes/aosp/ #将当前路径切换到刚刚挂载的的镜像中wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包tar xf aosp-latest.tarcd AOSPrepo sync # 正常同步一遍即可得到完整目录

  如果repo没有配置环境变量,那么需要把repo的绝对路径加上,例如刚刚把repo下载到~/bin下了,那么在同步时应该是~/bin/repo sync。安静的等待源码下载同步完成。

  编译源码
  step1 在源码的当前路径下:
  

$ source build/envsetup.sh 

  如果不出意外会得到以下结果:

  

  step2:接下来就是根据设备选择target
  
  我这里选择的是5 aosp_x86-eng。每个选项对应的device可以在这里查看 如果打不开,我截了张图,大家可以根据自己的情况选择
 
  选择好target后就可以直接进行编译了
  不过在这之前你可能还需要下载驱动(如果只是想查看源码也可以忽略该步)
将下载下来的文件解压到源码的根目录会得到三个.sh的文件,依次运行三个文件,例如:

$ ./extract-broadcom-hammerhead.shThe license for this software will now be displayed.You must agree to this license before using this software.Press Enter to view the licensels

回车后查看license,翻到license最后,输入I ACCEPT后回车,这时会将驱动文件释放到vendor目录。

  step3:
 

$ make -j8

  使用make构建,该命令可以通过使用-jN参数来处理并行任务。此处的N,根据所用的计算机的硬件的核数来指定,一般N指定为CPU核心的1到2倍。接下来就是漫长的编译过程,具体编译时长得看机器的情况了。并且有可能出现各种问题,这个时候不要着急,可以根据错误日志搜索,一般都能找到解决办法。解决之后,在接着运行上边的make 命令就好,会继续在你中断的地方开始编译。
  最后如果出现:
  

make completed successfully

  那么恭喜你,编译成功了,因为我这里选择的是模拟器的,所以可以通过

$ emulator

  直接启动,刚刚编译的系统。(如果没有下载驱动,可能会卡在启动页面。)

  导入Android Studio
  在编译玩Android源码后,我们继续编译生成Android studio工程:

soruce build/envsetup.shmmm development/tools/idegen/sudo ./development/tools/idegen/idegen.sh

  其中mmm development/tools/idegen/执行完成后会生成idegen.jar,而sudo ./development/tools/idegen/idegen.sh则会在源码目录下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.这三个文件
  android.ipr:通常是保存工程相关的设置,比如编译器配置,入口,相关的库等
  android.iml:则是主要是描述了modules,比如modules的路径,依赖关系等.
  android.iws:则主要是包含了一些个人工作区的设置.

  接下来,打开Android Studio,点击File->Open,选择刚才生成的android.ipr文件即可,然后就是漫长的等待,注意此时是将源码完全导入到AS中了,不出意外,你会觉得AS运行会卡顿。还需要我们忽略掉一些不经常使用的包。
  在Android Studio导入成功之后,项目结构如下:
  
  红色的表示已经被忽略了,没有导入,那么也可以通过以下方法来对指定的包进行修改是否导入:
  
  
  也可以直接在project Structure中进行修改:
  

  在修改完后,我们可以在android.iml可以看到,我们忽略导入了那些包:
  

  如果熟悉了包的结构,就可以直接在该文件中,完成忽略导入的操作,是最快捷的方式。

  这样我们就可以使用Android Studio阅读源码了,在源码阅读过程中可能会出现跳转到SDK对应的方法中的问题,这个时候,需要先配置一下SDK,然后修改项目依赖就可以了。到这儿,就可以越快的撸源码了。Good Luck

更多相关文章

  1. Android(安卓)环境搭建
  2. android studio调试c/c++代码
  3. 2014.01.21 ——— android 关联android-support源码
  4. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  5. android拍照与读取相册
  6. Android(安卓)报错:Caused by: android.os.FileUriExposedExcepti
  7. 细数Android(安卓)Studio中使用junit4测试框架中的坑
  8. [android]编译时出现/usr/bin/ld: skipping incompatible /usr/l
  9. 编译android的linux内核

随机推荐

  1. sql server 2008 压缩备份数据库(20g)
  2. SQL server 2016 安装步骤图文教程
  3. 安装SQL Server 2016出错提示:需要安装ora
  4. SqlServer 查询时日期格式化语句
  5. SQL Server 文件操作方法
  6. SQL Server中T-SQL 数据类型转换详解
  7. SQL的常用数据类型列表详解
  8. 详解SQL Server中的事务与锁问题
  9. 基于SSIS 事件的向上传递(详解)
  10. sqlserver建立新用户及关联数据库教程