郑州企业自助建站系统/广告营销案例分析
学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于源码的探索和学习。本文不介绍怎么下载的源码,主要是记录编译源码时踩过的坑,为自己同时也便于读者少走弯路。
为了方便读者做对比,这里简单介绍一下笔者的硬件和软件配置:
- 硬件:MAcBook Pro
- 处理器:2.6GHz 六核 Intel Core i7
- 内存:16GB 2667 MHz DDR4
- macOS:Sonoma 14.6.1
- 存储:外接 1T 的移动固态硬盘(希捷Seagate)
- 软件:
- XCode 16.0(16A242D)
- Mac sdk 15.0
1.不能找到一个支持的 mac sdk 错误
报错提示如下所示:
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13" "10.14"]
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13" "10.14"]
在执行编译过程中,如果出现不能找到一个支持的mac sdk错误(XCode 的 sdk),可以通过下面的命令行编辑以下文件:
vim build/soong/cc/config/x86_darwin_host.go
添加已安装的mac sdk版本号即可,笔者这里安装 XCode 自带的是:15和15.0,就都给添加上了
然后,重新编译,解决了该问题!!!
在继续编译的过程中,又出现了新的问题…
2.VNDK library list has been changed
报错提示如下所示:
error: VNDK library list has been changed.Changing the VNDK library list is not allowed in API locked branches.
错误原因是:out/target/product/generic/obj/PACKAGING/vndk_intermediates/libs.txt 和 build/make/target/product/gsi/29.txt 文件内容不一致所导致,根据提示的差异内容和文本对比工具进行差异对比,笔者查到的解决方案有如下几种:
- 将 libs.txt 的内容完全复制到 29.txt 即可解决;(笔者试了几次并没有解决)
- 删除 libs.txt 文本文件;(笔者试了几次也没有解决)
- 将 29.txt 文本文件以及其所在同目录下的 current.txt 文本文件,与 libs.txt 的内容保持一致(即用 libs.txt 的内容覆盖其它两个文件的内容);(笔者试了几次依然没有解决)
- 使用下面的命令进行编译:
make target-files-package
使用上述命令解决了该问题!!!
在继续编译的过程中,又出现了新的问题,编译源码真的是不断摸索前进…
3.sprintf is deprecated
报错提示如下所示:
external/protobuf/src/google/protobuf/io/strtod.cc:62:14: error: 'sprintf' is deprecated: This function is provided
for compatibility reasons only. Due to security concerns inherent in the design of sprintf(3), it is highly
recommended that you use snprintf(3) instead. [-Werror,-Wdeprecated-declarations]int size = sprintf(temp, "%.1f", 1.5);^
sprintf 函数在某些版本的 C 或 C++ 标准库中已被标记为过时(deprecated)。这意味着,虽然在当前代码中它仍然可以使用,但是在未来的库版本中,它可能会被移除。使用这个函数可能会产生警告,并且建议使用其他更现代、更安全的函数。
报错的原因是:sprintf 函数被弃用,编译器认为使用 sprintf 函数不安全,按照提示将对应语法替换为 snprintf 函数即可:
下图为报错提示的 strtod.cc 文件的全路径,便于读者快速查找并修改:
strtod.cc 文件中将对应语法替换为 snprintf 函数:
解决方法:使用 snprintf 或 sprintf_s(取决于你使用的是 C 还是 C++ 以及你的编译器)来代替 sprintf。这两个函数是当前标准库中的替代函数,它们提供了类似的功能,但是更加安全,不会有过时的问题。代码修改后的前后对比如下:
// 旧的使用 sprintf 的代码
char temp[16];
int size = snprintf(temp, "%.1f", 1.5);// 替换后新的使用 snprintf 的代码
char temp[16];
int size = snprintf(temp, sizeof(temp), "%.1f", 1.5);
替换后解决该问题,在继续编译的过程中,又出现了新的问题,编译源码真的是要有不断与报错抗争的耐心…
4.use of undeclared identifier ‘PAGE_SIZE’
报错提示如下所示:
system/core/base/cmsg.cpp:36:21: error: use of undeclared identifier 'PAGE_SIZE'if (cmsg_space >= PAGE_SIZE) {^
system/core/base/cmsg.cpp:78:21: error: use of undeclared identifier 'PAGE_SIZE'if (cmsg_space >= PAGE_SIZE) {^
2 errors generated.
17:46:11 ninja failed with: exit status 1
报错的原因是:使用未声明的标识符**‘PAGE_SIZE’**,即 PAGE_SIZE 这个变量未定义。
解决方法:
satckoverflow 上有人碰到类似的问题,看到下面有回复说是配置mac os sdk版本的问题,这里采用回答所给的第二个方案改了一下:
在 ~/system/core/base/include/android-base/cmsg.h 头文件中添加如下内容:
#ifndef PAGE_SIZE
#define PAGE_SIZE (size_t)(sysconf(_SC_PAGESIZE))
#endif
添加声明后该问题解决,继续编译…
相关文章:

记录Mac编译Android源码踩过的坑
学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于…...

C++ 数据结构算法细节相关
细节 队列 这段代码实现的是二叉树的层序遍历,也就是按照树的层次,一层一层地遍历节点。下面我会为你详细解释这段代码。 queue <TreeNode*> q; 这是一个队列,队列中存放的是指向TreeNode的指针。队列(queue)是…...

【HTML5】html5开篇基础(1)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...

C#自定义曲线绘图面板
一、实现功能 1、显示面板绘制。 2、拖动面板,X轴、Y轴都可以拖动。 3、显示面板缩放,放大或者缩小。 4、鼠标在面板中对应的XY轴数值。 5、自动生成的数据数组,曲线显示。 6、鼠标是否在曲线上检测。 二、界面 拖动面板 鼠标在曲线上…...

Java后端面试题+下一篇答案+实况场景题
uu们大家好!市面上面试题很多,这边汇总并更新一下java后端面试的题目,助大家早日斩下心仪的offer!!(下次跟新场景题...等我多碰几次壁...哈哈哈哈哈) 这边放题目,下一篇跟新所有另面…...

完美解决vant浮动气泡+弹出菜单
使用框架: vue3,vant4 项目需求: 需要有一个浮动气泡,点击弹出导航菜单 遇到的问题: 1. 使用van-floating-bubble包裹van-popover,但点击后只会重复显示不能隐藏 2. popover位置固定,不能根据…...

SpringSecurity -- 入门使用
文章目录 什么是 SpringSesurity ?细节使用方法 什么是 SpringSesurity ? 在我们的开发中,安全还是有些必要的 用 拦截器 和 过滤器 写代码还是比较麻烦。 SpringSecurity 是 SpringBoot 的底层安全默认选型。一般我们需要认证和授权…...

C语言习题~day33
1.以下程序运行时,若输入1abcedf2df输出结果是() #include <stdio.h> int main() { char a 0, ch; while ((ch getchar()) ! \n) { if (a % 2 ! 0 && (ch > a && ch < z)) ch ch - a A; a; putchar(ch); }…...

作业报告┭┮﹏┭┮(Android反调试)
一:Android反调试 主要是用来防止IDA进行附加的,主要的方法思路就是,判断自身是否有父进程,判断是否端口被监听,然后通过调用so文件中的线程进行监视,这个线程开启一般JNI_OnLoad中进行开启的。但是这个是…...

在 Delphi BSD11中安装 DCU 格式的第三方组件库
在 Delphi BSD 11 中安装 DCU 格式的第三方组件库可以按照以下步骤进行: 打开 Delphi:启动 Delphi 开发环境。 选择安装组件: 在菜单栏中,选择 Component -> Install Component。 选择 DCU 文件: 在弹出的对话框中…...

综合题第二题(路由器的配置)
题目 如何计算子网掩码 第一类 我们可以观察到上图的IP地址后面有“/26”、“30”。我们都知道子网掩码是由多个连续“1”和多个连续“0”组成的,“、26”表示子网掩码的二进制表达中有26个1。 例如:156.95.9.128/26 1111 1111.1111 1111.1111 1111.1…...

人工智能概览
目录 什么是人工智能 人工智能的历史与发展 人工智能发展时间轴示意图: 人工智能的主要分支 机器学习与深度学习在AI中的地位 什么是人工智能 人工智能(Artificial Intelligence, AI)是指由人制造出来的具有一定智能的系统,能够理…...

[vulnhub] Prime 1
https://www.vulnhub.com/entry/prime-1,358/ 主机发现端口扫描 探测存活主机,137是靶机 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 16:25 CST Nmap scan report for 192.168.75.1 Host is up (…...

JavaSE——lombok、juint单元测试、断言
一、lombok的使用 默认jvm不解析第三方注解,需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…...

商标价值如何评估与增值?
商标是企业的标志,代表着企业的产品或服务质量、信誉和形象。一个具有高知名度和美誉度的商标,能够为企业带来巨大的商业价值。它不仅可以帮助企业在市场中脱颖而出,吸引消费者的关注和购买,还可以作为企业的重要资产进行融资、并…...

linux命令之firewall-cmd用法
firewall-cmd Linux上新用的防火墙软件,跟iptables差不多的工具 补充说明 firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第…...

深入浅出CSS盒子模型
“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩!什么是盒子模型?盒子模型的组成部分详解1. 内容区(Content)2. 内边距(Padding)3. 边框(Border&am…...

字符编码发展史4 — Unicode与UTF-8
上一篇《字符编码发展史3 — GB2312/Big5/GBK/GB18030》我们讲解了ANSI编码中的GB2312/Big5/GBK/GB18030。本篇我们将继续讲解字符编码的第三个发展阶段中的Unicode与UTF-8。 2.3. 第三个阶段 国际化 前面提到的第二个阶段,各个国家和地区各自为政,纷纷…...

【flink】之如何消费kafka数据并读写入redis?
背景: 最近公司出现做了一个新需求,需求内容是加工一个营销时机,但是加工营销时机的同时需要把数据内容里的一个idmapping存入redis用于后续的读写。 准备: <!-- 依赖 --><dependency><groupId>org.apache.fl…...

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引
场景 首先介绍测试的场景,本系列schema定义 pdm文档索引,包括nested,作为文档扩展属性字段,_content字段是组件保留字段,支持文本内容,字段属性还有其他属性,如boost,getter&#x…...

离散化算法
离散化 在C中,离散化通常指的是将连续的数值或数据转化为离散的形式。这在数值分析、信号处理、图像处理和机器学习等领域都非常常见。以下是一些离散化的基本概念和方法: 1.区间划分: 将连续变量的值域分成多个区间,每个区间对…...

基于ollama的本地RAG实践
先放参考的原文链接大语言模型实战——搭建纯本地迷你版RAG_本地rag-CSDN博客 一、大模型选择 在我之前的文章中有讲到,我用的是ollama中的llama3.1 Ollama在Windows安装,使用,简单调用API_ollama如何对外提供api-CSDN博客 二、嵌入模型 …...

安卓开发板_MTK开发板_联发科开发评估套件Demo板接口介绍
开发板是一种功能丰富的电路平台,专为开发人员设计,集成了多种传感器、扩展接口和通信模块。这使得开发者能够高效进行原型设计和功能验证,极大地简化了软硬件开发的过程。 此次介绍的安卓开发板由MT8788核心板与底板构成,特别之处…...

代码随想录冲冲冲 Day58 图论Part9
47. 参加科学大会(第六期模拟笔试) 根据昨天的dijkstra进行堆优化 使用的原因是点多但边少 所以直接对于边进行操作 1.对于priority_queue来说 这是最小堆, 小于的话就是最大堆 之后由于是根据边来说的 所以新建一个Edge并且初始化一下 之后由于使用…...

UnityHub下载任意版本的Unity包
1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可...

网站服务器怎么计算同时在线人数?
网站服务器计算同时在线人数通常涉及跟踪和记录当前活跃会话的数量。以下是几种常用的方法来估算或计算网站的同时在线人数: 1. 会话跟踪 - 基于会话(Session):服务器可以为每个访问者创建一个会话,并跟踪这些会话。当访问者首次访问网站时&a…...

[spring]MyBatis介绍 及 用MyBatis注解操作简单数据库
文章目录 一. 什么是MyBatis二. MyBatis操作数据库步骤(使用注解)创建工程创建数据库创建对应实体类配置数据库连接字符串写持久层代码单元测试 三. MyBatis基础操作 使用注解打印日志参数传递增删改查 一. 什么是MyBatis 简单来说 MyBatis 是更简单完成程序和数据库交互的框架…...

Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析
Keyshot是一款强大的实时光线追踪和全域光渲染软件,它确实可以用于制作汽车动画,包括汽车模型的渲染和动画展示。Keyshot的动画功能允许用户创建相机移动、物体变化等动态效果,非常适合用于汽车动画的制作。 至于汽车动画的渲染成本ÿ…...

AI智能时代:哪款编程工具让你的工作效率翻倍?
引言 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程工具让你的工作效率翻倍?是智能的代码编…...

这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了
大模型(Large Language Models, LLMs)是近年来人工智能领域的一大热点,它们在自然语言处理、对话系统、内容生成等多个方面展现出了强大的能力。随着技术的发展,市面上出现了许多介绍大模型理论与实践的书籍,为研究人员…...