为wordpress 转 app,网站seo课设,蒙晟建设有限公司官方网站,京东物流网站学习Android源码#xff0c;如果电脑配置还不错#xff0c;最好还是下载一套源码#xff0c;经过编译后导入到Android Studio中来学习#xff0c;这样会更加的直观#xff0c;代码之间的跳转查看会更加方便。因此#xff0c;笔者决定下载并编译一套源码#xff0c;以利于…学习Android源码如果电脑配置还不错最好还是下载一套源码经过编译后导入到Android Studio中来学习这样会更加的直观代码之间的跳转查看会更加方便。因此笔者决定下载并编译一套源码以利于源码的探索和学习。本文不介绍怎么下载的源码主要是记录编译源码时踩过的坑为自己同时也便于读者少走弯路。
为了方便读者做对比这里简单介绍一下笔者的硬件和软件配置
硬件MAcBook Pro 处理器2.6GHz 六核 Intel Core i7内存16GB 2667 MHz DDR4macOSSonoma 14.6.1存储外接 1T 的移动固态硬盘希捷Seagate 软件 XCode 16.016A242DMac 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_SIZEif (cmsg_space PAGE_SIZE) {^
system/core/base/cmsg.cpp:78:21: error: use of undeclared identifier PAGE_SIZEif (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添加声明后该问题解决继续编译…