MacOS下编译Android6.0源代码

Posted 亦袁非猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MacOS下编译Android6.0源代码相关的知识,希望对你有一定的参考价值。

编译android系统,只能在OS X环境下或者是Linux环境下,这篇文章,也是买Mac不久后写的,当时想顺便测试一下电脑的性能,编译Android系统要多久。整理笔记的时候发现,也就顺便发布出来。

MacOS下编译Android6.0源代码

必备软件

下载并安装xcode

  1. 通过App store可以安装xcode

  2. 下载安装Xcode Command Line Tools,如果之前安装过,输入该命令的时候,提示已经安装

    ➜  ~ xcode-select --install
    xcode-select: error: command line tools are already installed, use "Software Update" to install updates
  3. 看了几篇教程,很多人都说要下载安装MacPorts,然后通过MacPorts下载git等,其与Homebrew类似,对比后觉得Homebrew更好,推荐使用后者。整个流程下来,发现没有安装也没啥问题,同样可以顺利完成。

创建镜像

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

镜像命名为Android,镜像的大小分了100G

➜  ~ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/Android.dmg
created: /Users/guidongyuan/Android.dmg.sparseimage

创建后,仍旧可以更改镜像的大小,命令如下

➜  ~ hdiutil resize -size <大小>g ~/Android.dmg.sparseimage

挂载镜像文件

➜  ~ hdiutil attach ~/Android.dmg.sparseimage -mountpoint /Volumes/android
/dev/disk4              GUID_partition_scheme
/dev/disk4s1            EFI
/dev/disk4s2            Apple_HFS                       /Volumes/android

挂载后,如果想卸载,命令如下

➜  ~ hdiutil detach /Volumes/android
"disk4" unmounted.
"disk4" ejected.

解除最大文件数

Mac系统下默认只能同时打开1024个文件,编译的时候有可能突破这个数目,因此需要解除限制。如果是使用on_my_zsh,在这里,需要进行切换为默认的bash,不然执行到后面的时候,也会出现错误。打开bash的配置文件.bash_profile,如果没有的话,会默认新建该文件。

~ vim ~/.bash_profile
~ source .bash_profile

在文件中添加下面的内容

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

下载源代码

下载方式有很多种,由于网络比较慢,就选择了最后一种,最简单的方式:

  1. 直接通过官方下载  

  2. 通过国内镜像下载  

  3. 下载网友打包好的单独源码文件(有网友把所有各个版本都上传到百度云 http://pan.baidu.com/s/1ngsZs)

编译源码

通过方式3下载后,拷贝到前面创建好的分区,/Volumes/android,进行解压

初始化编译环境

进去解压后的文件路径/Volumes/Android_source/android-6.0.1_r1

➜  android-6.0.1_r1 source build/envsetup.sh

开始编译

➜  android-6.0.1_r1 make -j4

整个过程需要一个多小时,编译过程会出现一些错误导致停止,都逐一记录在下面

编译idegen

上面编译源码后,想导入到Android Studio进行阅读,需要编译idegen生成idegen.jar和生成Android Studio导入所需的.ipr/.iml文件

$ source build/envsetup.sh
$ mmm development/tools/idegen/

一开始只是运行上面命令中的第二条mmm语句,提示找不到mmm,网上查了一下,说是需要安装Xcode Command Line Tools,已经安装了,而且还可以执行make命令,为啥在这里就提示找不到呢?后来才知道需要重新执行上面命令的第一条语句再执行。

$ sh ./development/tools/idegen/idegen.sh

导入到Android Studio进行阅读

  1. 打开Android Studio,file-->open,找到Android.ipr。

  2. 导入的时候,会提示case-sensitive(大小写敏感)

解决办法:  
/Applications/Android\ Studio.app/Contents/bin/idea.properties文件中添加一行:

idea.case.sensitive.fs=true

重新启动应用,终于可以在Android Studio看代码了

错误提示

提示只支持bash

➜  android-6.0.1_r1 source build/envsetup.sh
build/envsetup.sh:573: command not found: complete
WARNING: Only bash is supported, use of other shell would lead to erroneous results

解决办法:修改完成后,需要重启终端

➜  android-6.0.1_r1 chsh -s /bin/bash

SDK版本错误

出现该错误是因为Xcode中/Developer/SDKs的版本在build/core/combo/mac_version.mk文件中没有收录

Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk

解决办法:  

  1. 查看Xcode中/Developer/SDKs的版本,在该路径下/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs就可以查看当前系统的SDK版本,查看我的是10.12

  2. 一开始按照网上的解决办法,是直接在build/core/combo/mac_version.mk添加自己系统SDKs的版本号,但是修改后,继续运行的时候,还有下面这个错误出现,提示使用10.12版本出错,看来通过修改为最新版本还是不能解决问题

system/core/libcutils/threads.c:38:10: error: 'syscall' is deprecated: first deprecated in OS X 10.12 - syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost(). [-Werror,-Wdeprecated-declarations]
  return syscall(SYS_thread_selfid);
         ^
host C: libcutils <= system/core/libcutils/iosched_policy.c
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/unistd.h:733:6: note: 'syscall' has been explicitly marked deprecated here
int      syscall(int, ...);

    a. 重新下载MacOSX10.11.sdk https://github.com/phracker/MacOSX-SDKs,下载完成后进行解压,放到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

    b. 修改mac_version.mk

➜  android-6.0.1_r1 vim build/core/combo/mac_version.mk

找到mac_sdk_versions_supported :=  10.6 10.7 10.8 10.9  
修改为mac_sdk_versions_supported :=  10.6 10.7 10.8 10.9 10.11

jdk版本错误

Android 6.0编译的时候,不能使用1.8版本,修改切换到1.7版本

Your version is: java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode).
The required version is: "1.7.x”

解决办法:  

  1. 下载并安装jdk-7u71-macosx-x64.dmg  
    http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u71-oth-JPR

  2. 修改默认jdk的路径

Goddards-MBP:~ guidongyuan$ vim ./.bash_profile

修改为使用1.7版本

# 默认为
export JAVA_HOME=$(/usr/libexec/java_home)
# 使用1.7 版本
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
# 使用1.8版本
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

以上是关于MacOS下编译Android6.0源代码的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu12.04下编译 全志A33 android6.0 源码

02Mac下编译java代码

MacOS下编译percona及部分函数的运算差异

在VS2013下编译的C ++代码无法在VS2015下编译

Windows下编译MySQL 5.7源代码

AssertionError:Torch 未在启用 CUDA 的情况下编译