概述
事情的起因是做一次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