当前位置: 首页 > news >正文

(编译到47%失败)to be deleted

Mac 下 Android 源码编译从零开始:Day Two--编译

编译准备工作

官网链接:source.android.google.cn/source/buil…

编译命令的基本顺序如下:

下载专用二进制文件,即驱动文件

下载链接: developers.google.com/android/dri…

坑点:需要下载对应细分版本的驱动,对照如下图所示:

驱动官网:developers.google.com/android/dri…

选择对应的驱动下载,如图:

解压专有二进制文件

接下来将两个压缩包解压到源码根目录 WORKING_DIRECTORY,并分别运行两个解压后的.sh文件,cd 到 WORKING_DIRECTORY 目录,即源码根目录,分别在终端执行以下命令:

sh extract-huawei-angler.sh
复制代码
sh extract-qcom-angler.sh
复制代码

将驱动文件提取出来,放到新生成的 /vendor/ 目录下。

每组二进制文件都是压缩包中的一个自解压脚本。解压每个压缩包,从源代码树的根目录运行附带的自解压脚本,然后确认您同意附带的许可协议的条款。二进制文件及其对应的 Makefile 将会安装在源代码树的 vendor/ 层次结构中。

坑点:需要一直按enter,知道第8点的第e项,慢慢按,直到End,再按一次Enter就会提示你输入 “I ACCEPT” 来同意使用协议,之后才会提取出驱动文件到 /vendor/目录。

结束时会提示:

······
x vendor/qcom/angler/proprietary/iperf3
x vendor/qcom/angler/device-partial.mk

Files extracted successfully.
复制代码

如下图所示:

清理

source.android.com/setup/build…

为了确保新安装的二进制文件在解压后正确生效,请使用以下命令删除此前所有编译操作的已有输出:

make clobber
复制代码

坑点:由于Mac的SDK默认只有14的版本,编译需要的是14以下的SDK,因此执行 make clobber 时会报如下错误:

internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
复制代码

如图所示:

make clobber 清理成功如下图所示:

Final Step: 执行编译

设置环境 使用 envsetup.sh 脚本初始化环境。请注意,将 source 替换成 .(一个点)可以省去一些字符,这种简写形式在文档中更为常用。

source build/envsetup.sh
复制代码

. build/envsetup.sh
复制代码

选择目标

使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如以下命令:

lunch aosp_arm-eng
复制代码

该命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。

如果您没有提供任何参数就运行命令,lunch 将提示您从菜单中选择一个目标。

所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。

BUILDTYPE 是以下类型之一:

要详细了解如何针对实际硬件进行编译以及如何在实际硬件上运行版本,请参阅运行版本。

编译代码

请注意,本部分只是一个摘要,用于确保设置已完成。如需关于编译 Android 的详细说明,请参阅运行编译系统。

您可以使用 make 编译任何代码。GNU Make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 make -j16 到 make -j32 之间的命令。

make -j4
复制代码

坑点:万事开头难,事实上运行了几次都是同一个结果:failed

谷歌查到解决方案:可能是heap size 不足,尝试修改 heap size 大小。 blog.csdn.net/qq_27061049…

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8
-XX:+TieredCompilation -mx4096M}"
复制代码

运行还是同样的报错,说明不是 heap size 不足的问题。

终极解决方案,感谢大神:

www.jianshu.com/p/35f840dd7…

内牛满面,很激动,终于编译通过了。事实证明,官方文档有很多坑都没指出来,如果仅仅跟随官方文档,只能是跟我这样一路含泪趟坑过来。本教程已经把该遇到的坑都埋了,请尽情享用,有遗漏之处,请不吝指出。

输入以下命令:

mm
复制代码

成功之后提示如下log:

 make completed successfully (01:31 (mm:ss)) 
复制代码

如截图所示:

接着 Replace prebuilt bison binary with patched binary

cp /Volumes/android/WORKING_DIRECTORY/out/host/darwin-x86/bin/bison /Volumes/android/WORKING_DIRECTORY/prebuilts/misc/darwin-x86/bison/
复制代码

Build

make  -j4
复制代码

小坑点:到执行 make -j4 命令进行最终编译前,记得退回到源码根目录,此处为 WORKING_DIRECTORY

正常编译中的截图如下所示:

最终编译成功之后的截图如下所示:

待补。

实际上,执行到51%又失败了,这次的原因折腾了N久才定位到:jack-server 无法 connect to 127.0.0.1 port 8077 failed: Connection refused

由于翻墙的需要,在前面需要对Mac设置全局代理,将蓝灯设置入口 参考链接:

相关文章:

  • (一)插入排序
  • 阿里一道Java并发面试题 (详细分析篇)
  • 内核对象句柄
  • 函数-函数文档
  • Zookeeper的介绍与基本部署
  • 前端开发学习Day29
  • 分布式配置中心disconf第二部(基于注解的实现)
  • nacos客户端篇
  • Java虚拟机,类文件结构深度解析
  • SpringCloud微服务治理三(Zuul网关)
  • JQuery实现表单验证
  • 钉钉与wcp集成通知【原创】
  • Html5新的选择器
  • 说说Charles
  • 对比MySQL,一文看透HBase的能力及使用场景
  • CSS居中完全指南——构建CSS居中决策树
  • Effective Java 笔记(一)
  • golang 发送GET和POST示例
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • SAP云平台里Global Account和Sub Account的关系
  • spring学习第二天
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • Yii源码解读-服务定位器(Service Locator)
  • 工程优化暨babel升级小记
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于使用markdown的方法(引自CSDN教程)
  • 力扣(LeetCode)21
  • 网页视频流m3u8/ts视频下载
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  •  一套莫尔斯电报听写、翻译系统
  • 用Python写一份独特的元宵节祝福
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​马来语翻译中文去哪比较好?
  • #AngularJS#$sce.trustAsResourceUrl
  • #每天一道面试题# 什么是MySQL的回表查询
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (function(){})()的分步解析
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (十八)三元表达式和列表解析
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)大型网站的系统架构
  • (轉貼) UML中文FAQ (OO) (UML)
  • *2 echo、printf、mkdir命令的应用
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net mvc部分视图
  • .NET 反射的使用
  • .NET 跨平台图形库 SkiaSharp 基础应用