macOs中android源码下载及编译过程问题总结

  • Post author:
  • Post category:其他



产考资源


源码下载官方参考地址:

https://source.android.com/source/downloading.html


源码版本官方产考地址:

https://source.android.com/source/build-numbers.html#source-code-tags-and-builds


清华镜像源下载产考地址:

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP


下载过程遇到的问题



1. fatal: Cannot get

https://gerrit.googlesource.com/git-repo/clone.bundle

解决办法有两种:



2. gpg (GnuPG) is not available

解决办法:

请点击这里安装GunPG


编译过程遇到的问题



1. internal error: Could not find a supported mac sdk: [“10.10” “10.11” “10.12”]

缺少对应版本的sdk,这里给出两种解决办法:

  • 查找mac sdk版本,执行命令:ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

    如图:
    在这里插入图片描述

    然后build/soong目录按文件内容搜索”10.10″,找到了文件bulid/soong/cc/config/x86_darwin_host.go文件,只需修改对应内容即可,如图:

    在这里插入图片描述

  • 请点击这里

    下载对应sdk,解压并复制到

    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/目录下,重新编译即可。


2. build/core/config.mk:663: error: 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.

解决办法:在config.mk中找到663行发现如图代码:
在这里插入图片描述

这段代码主要是通过find-jdk-tools-jar.sh脚本来寻找jdk路径并赋给HOST_JDK_TOOLS_JAR,打开find-jdk-tools-jar.sh文件后发现如下代码:

在这里插入图片描述

对比错误日志信息可以看出图中代码执行的是else分支(错误日志中的…/lib/tools.jar提示和else分支echo输出对应),那么最终查出没有ANDROID_JAVA_HOME环境变量,设置即可,步骤如下:

在~/.bash.profile中添加如下代码:

export ANDROID_JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk.xxx.jdk/Contents/Home

export PATH=$ANDROID_JAVA_HOME:$PATH

然后,重启terminal再次编译即可。



3. error: Case-insensitive filesystems not supported.

mac默认磁盘是不区分大小写,android源码编译需要区分大小写,这个问题在使用git提交有大写字母的文件名时可能会遇到。解决办法有多种,本文选取最简单的一种:用磁盘工具新建一个对大小写敏感的宗卷,然后把源码拷贝到该目录重新执行编译即可。建立宗卷如图:

在这里插入图片描述



4. error:external/googletest/googletest: MODULE.TARGET.STATIC_LIBRARIES.libgtest already defined by external/googletest/googletest

变量重复定义,查询资料原来是NDK_ROOT在环境变量中已经定义过了,和源码冲突,终端执行命令:unset NDK_ROOT,重新编译即可。



5. 带有

aidl_language_l

的错误,如: lex out/soong/.inter…/system/tools/aidl/aidl_language_l.cpp ninja: build stopped: subcommand failed.

解决办法,在源码目录依次输入命令 :

source build/envsetup.sh

lunch full-eng

cd external/bison

git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160

mm

cd . ./. ./

cp out/host/darwin-x86/bin/bison prebuilts/misc/darwin-x86/bison/

make -j4



6. 带有’

_Nullable

‘的错误 如:nullability specifier ‘_Nullable’ cannot be applied to non-pointer type ‘uuid’

解决办法:macOS新版 sdk 的一些api接口发生变化,

请点击这里

下载低版本sdk版本即可(笔者降低到是10.12),sdk安装方法可参照上述编译问题1。



7. Communication error with Jack server (52). Try ‘jack-diagnose’

解决办法编译信息中有提示:Ensuring Jack server is installed and started,首先启动jack server,命令为:jack-admin start-server,如果启动不成功则检查是否安装。



8. Out of memory error (version 1.3-rc6 ‘Douarn’ (441800 22a11d4b264ae70e366aed3025ef47362d1522bb by

android-jack-team@google.com

)).GC overhead limit exceeded.Try increasing heap size with java option ‘

-Xmx<size>

’.

解决办法在错误信息中有提示:分配内存不足,要增加内存,具体增加多少根据自己电脑内存合理分配,比如设置内存为4g 即为 -Xmx4g,具体操作方法如下:

停止jack-admin: jack-admin kill-server

找到并打开jack-admin文件:out/host/darwin-x86/bin/jack-admin

将jack-admin文件中 JACK_SERVER_COMMAND=”java 修改为

JACK_SERVER_COMMAND="java -Xmx4g


重启jack-admin: jack-admin start-server

重新编译:make -j4



9.frameworks/av/media/libstagefright/DataSource.cpp:29:10: fatal error: ‘media/stagefright/DataURISource.h’ file not found

有两种办法

  • 找到frameworks/av/media/libstagefright/include/DataUriSource.h,拷贝该文件并替换文件内容和文件名为DataURISource。
  • 进入frameworks/av/media/libstagefright/include目录添加

    DataURISource.h文件



10.external/iptables/extensions/…/include/linux/netfilter_ipv4/ipt_ECN.h:13:10

解决办法和问题9类似:

cd external/iptables/extensions/…/include/linux/netfilter

找到xt_dscp.h制作副本,替换文件名为xt_DSCP.h(只替换文件名)



11. /bin/bash: xz: command not found. ninja: build stopped: subcommand failed.

解决办法:安装xz,步骤如下:


下载xz-utils

,下载完成后解压,并进入该文件目录,进行安装,xz安装步骤如下:

sh configure

make

make check

make install

mak installcheck

至此xz安装完成。


功夫不负有心人,最后截一幅编译成功的图


在这里插入图片描述



版权声明:本文为l790324166原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。