记一次ndk版本升级

概述

事情的起因是做一次android版本的业务迭代,发现程序crash掉了。经过分析,原因是中台部门对libc++_shared.so库进行了升级,正好我们的业务也会用到libc++_shared.so库,导致两个库版本冲突。具体crash的原因可以参见参考文献1。

为了解决该问题,中台的同学提出让我们升级ndk版本,使之和中台用到的libc++_shared.so库版本保持一致。

实现

下载ndk新版本

首先升级ndk版本

在AndroidStudio中,下载期望的ndk版本,如下图所示:

使用新下载的ndk

在项目的local.properties文件中,将ndk.dir变量指向新下载的ndk版本目录:

ndk.dir=/Users/didi/Library/Android/sdk/ndk/26.1.10909125

然而同步gradle配置后,会有一个报错:

NDK is missing a "platforms" directory. If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to /Users/didi/Library/Android/sdk/ndk/26.1.10909125. If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.

原因是我们当前使用的gradle的版本较低,需要先对gradle进行升级。

升级gradle

打开gradle/wrapper/gradle-wrapper.properties文件,进行如下替换操作:

-distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-4.6-all.zip

+distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-6.5-all.zip

将gradle的版本由4.6升级到了6.5.

再次同步gradle配置,这时会有一个新的报错:

Failed to notify project evaluation listener.
    org.gradle.api.file.ProjectLayout.filePro…

我们需要对gradle的插件进行升级。

升级gradle插件

在根目录下的build.gradle,进行以下操作:

dependencies {

-        classpath 'com.android.tools.build:gradle:3.2.1'

+        classpath 'com.android.tools.build:gradle:4.1.0'

}

再次同步gradle配置,项目的所有依赖正常。

验证

找到使用系统函数的地方,跳转到系统文件,可见其使用的ndk版本号。

参考文献

1. Android兼容之libc++_shared.so库冲突方案_android c++运行库冲突-CSDN博客

2. android studio指定ndk版本的方法_ndkversion-CSDN博客

3.(笔记)NDK is missing a “platforms“ directory. If you are using NDK, verify the ndk.dir is set to a val_ndk is missing a "platforms" directory. if you are-CSDN博客

4。 https://blog.csdn.net/qq_44402184/article/details/122226393

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/751121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Coldrage Dagger

剃刀高地【寒怒匕首 Coldrage Dagger】 2020.11.26.剃刀高地刷【寒怒匕首】-1_网络游戏热门视频 2020.11.26.剃刀高地刷【寒怒匕首】-2_网络游戏热门视频

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作,把用户账户禁用并重新启用后,发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示: - 在Outlook 里,用户标签页的组织一直显示“正在加载...",成员身份也是“找不到任何组。…

【项目实训】数据库内容丰富

经团队讨论,对前端页面展示数据进行了增加,于是相应的修改数据库 经团队成员使用大模型对各公司面试经验中问题的总结优化,我们打算将大模型的回答存储到数据库中,以显示在前端页面 于是在数据库中存储大模型的回答:…

同三维T700转换器 USB转HDMI转换器

让USB摄像头变成HDMI输出,支持4K60输出 一、产品简介: 此转换器可以把USB信号转成HDMI信号,支持4K60 HDMI输出,有效解决了USB摄像头连接电视、显示器、导播台的问题,带USB控制口,可升级/接蓝牙接收器&#…

【微服务网关——hystrix-go类库】

1.hystrix-go类库 hystrix-go 是 Netflix 开源的 Hystrix 库在 Go 语言中的实现,用于处理服务中的故障和延迟问题。它通过提供熔断器(Circuit Breaker)、隔离、降级、限流、以及实时监控等机制,帮助开发者构建健壮的分布式系统。…

初学51单片机之长短键应用定时炸弹及扩展应用

51单片机RAM区域划分 51单片机的RAM分为两个部分,一块是片内RAM,一块是片外RAM。 data: 片内RAM从 0x00 ~0x7F 寻址范围(0-127) 容量共128B idata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256B pdata&am…

ADC位数、增益调制与参考电压

位数:12bit、10bit、8bit 一般就是对应的ADC值分别为:4095、1023、255,也就选用对应位数时ADC的最大值。 增益的作用 增益设置用于放大或缩小输入信号,使其适配到ADC的输入范围。增益设置可以通过配置SAADC的通道配置寄存器来实…

java基于ssm+jsp 毕业生就业信息管理系统

1管理员功能模块 管理员输入个人的用户名、密码、角色登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的用户名、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的用户名、密码&am…

高通安卓12-安卓系统定制1

1.改变系统默认语言 从build/make/target/product/full_base.mk 2.修改开机图片 安卓原版操作方式 找到生成脚本:device\qcom\common\display\logo\logo_gen.py 其中readme.txt有操作说明 命令: sudo apt-get install python-imaging python ./logo_…

[AIGC] Doris:一款高效的MPP数据仓库引擎

在大数据处理的领域中,Apache Doris(原百度 Palo)是一个高效的MPP(大规模并行处理)数据仓库,最初由百度开发,现在已经成为Apache的孵化项目。 (图片取自百度) – 文章目录 1. Doris的基础知识…

RocketMQ:日常开发中有哪些使用MQ的场景

什么是消息队列? 消息队列是一种通信方法,允许应用程序通过发送和接收消息来互相通信。这些消息/任务/指令存储在一个中间介质中(即队列),并由生产者发送,消费者接收。 使用场景 场景一:任务…

输出100以内的质数

质数&#xff1a;只能被1和自身整除的数 let count; for(let i2; i<100; i){for(let j1; j<i; j){if(i % j 0){// 只要能被整除&#xff0c;count就加1count;}} if(count 2) {// 从1到自身被整除完之后&#xff0c;如果count只有两次&#xff0c;则说明i为质数co…

【技巧】如何检查多个GPU之间是否支持P2P通信

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 需要用到cuda_samples&#xff1a;GitHub - NVIDIA/cuda-samples 该工具的详细解释可以看这个&#xff1a; 【知识】详细介绍 CUDA Samples 示例工程…

[数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1167 标注数量(xml文件个数)&#xff1a;1167 标注数量(txt文件个数)&#xff1a;1167 标注…

Leetcode Hot100之链表

1.相交链表 解题思路 快慢指针&#xff1a;分别求出两个链表的长度n1和n2&#xff0c;在长度较长的那个链表上&#xff0c;快指针先走n2 - n1&#xff0c;慢指针再出发&#xff0c;最后能相遇则链表相交 时间复杂度O(mn)&#xff0c;空间复杂度O(1)代码# Definition for singl…

白敬亭章若楠甜度报表的难哄大师

#白敬亭章若楠&#xff0c;甜度爆表的难哄大师#&#x1f389;&#x1f389;&#x1f389;各位小伙伴们&#xff0c;你们还记得那个让我们心跳加速、嘴角上扬的CP组合吗&#xff1f;没错&#xff0c;就是白敬亭和章若楠&#xff01;他们可是凭借一部新剧&#xff0c;再次让我们感…

520. 检测大写字母

题目 我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如 “USA” 。单词中所有字母都不是大写&#xff0c;比如 “leetcode” 。如果单词不只含有一个字母&#xff0c;只有首字母大写&#xff0c;比如 “Go…

World of Warcraft [CLASSIC] plugin lua

World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…

常见的字符串函数(包含头文件string.h)和字符函数(2)

八. strstr函数 1.strstr的定义 char *strstr( const char *str1, const char *str2 ); ->1. strstr查找子串(str2)在字符串(str2)中第一次出现的位置&#xff0c;记录并返回该位置的指针&#xff0c;如果找不到&#xff0c;则返回NULL ->2. str1&#xff1a;查找字符…

不用再找了,这是大模型实践最全的总结

随着ChatGPT的迅速出圈&#xff0c;加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说&#xff0c;传统的单机单卡训练模式肯定不能满足上千&#xff08;万&#xff09;亿级参数的模型训练&#xff0c;这时候我们就需要解决内存墙和通信墙等一系列问题&am…