Mac编译android源码的坑

来源:互联网 发布:java 视频播放 编辑:程序博客网 时间:2024/06/05 18:20

Mac编译android源码

因为项目需要在代码线上编译app,想在mac上直接编译,省时省力。不过,配置环境过程中遇到不少坑,现在逐一记录下来。


主要有以下几点:

  • android开发环境
  • 创建大小写敏感的分区
  • MacPorts
  • Xcode
  • proguard
  • 其他坑

  1. android开发环境自不必说;
  2. mac本身对大小写不敏感,但android源码编译必须要对大小写敏感,所以必须要创建一块大小写敏感的分区,以供在上面进行编译;
  3. Xcode是个坑,版本不同会带来一些问题;
  4. MacPorts安装比较简单;
  5. proguard这个坑藏得比较深;

创建大小写敏感的分区

创建分区:

sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 55g ~/android.dmg

55g是我自己分的大小,官方推荐至少40g,硬盘空间足够的尽量分得大一些;

加载分区:

sudo hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android

打开分区:

cd /Volumes/android/

MacPorts

两步搞定:
1.下载安装MacPorts;
2.通过MacPorts安装相应工具:
- POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
- 这一步可能比较耗时,耐心等待


源码下载

代码线是通过公司vpn用repo下载的


Xcode版本

我这里要编译的是android4.4,对应的是Xcode5,然而我的mac上是Xcode7;

经过我的各种尝试和google,得出结论:Xcode7不适合编译4.4,改来改去太麻烦,不如降级;

然后我就卸载Xcode7,下载并安装Xcode6,并源码中对以下文件作修改:

build/core/combo/HOST_darwin-x86.mk
mac_sdk_versions_supported := 10.9 10.10 ifeq ($(mac_sdk_version),10.9) Mac SDK 10.8 no longer has stdarg.h, etc host_toolchain_header := $(HOST_TOOLCHAIN_ROOT)/lib/gcc/i686-appledarwin$(gcc_darwin_version)/4.2.1/include HOST_GLOBAL_CFLAGS += -isystem $(host_toolchain_header) endif 

其实就是修改相关mac_sdk_version,因为4.4是基于Xcode5的,相关mac_sdk_version是不同的;

总结:Xcode最好按需选择版本


开始编译

进入新分区cd /Volumes/android/
打开代码线cd CodeLineName/
开始编译source build/envsetup.shlunch(记得选对平台,不然出现各种问题就和我一样了)make/mmm/mm

proguard遇到的坑

其他项目都正常编译成功了,但是当我编译一个使用了okhttp3的项目的时候,出现以下错误:Error: Can't read [proguard.ClassPathEntry@121a9334] (Can't process class [okhttp3/Address.class] (Unsupported version number [51.0] for class format))
其实这就是proguard版本过旧的问题,需要替换源码目录下的proguard版本:/external/proguard我这里把4.4的替换为了5.21,可以暂时解决此问题。替换之后同样会导致其他问题,最好还是保持原有版本,需要的时候再替换。

其他坑

  1. 错误: 程序包com.sun.javadoc不存在;错误: 找不到符号

错误分析:jdk路径有问题


正确的(OSX下):

export PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:$PATH

错误的:

export PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/:$PATH

区别就在于bin后面有没有“/”,“jdk1.7.0_79.jdk”换成你自己的版本

0 0
原创粉丝点击