1. 运行时找不到so文件
具体表现为:已经在libs目录添加了所有平台的so文件,但是运行是依然提示找不到so文件。
如:
1 | java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.ijkplayer-CyD2mFQ8g6fyehi-g_1ALQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.ijkplayer-CyD2mFQ8g6fyehi-g_1ALQ==/lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "libijkffmpeg.so" |
问题:
编译时,jniLibs默认的路径是 /app/src/main/jniLibs
,如果so文件放在 /app/libs
需指定目录。
解决:
so文件放置在
/app/src/main/jniLibs
(推荐)指定工程的so文件路径
build.gradle1
2
3
4
5
6
7
8android {
...
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
2. AS提示ndk版本不匹配
编译是出现错误:
1 | No version of NDK matched the requested version 21.0.6113669. Versions available locally: 21.3.6528147 |
本地是:21.3.6528147版本,需要匹配21.0.6113669版本。
问题:AS没有配置NDK路径
解决:给工程配置NDK-21.3.6528147版本的路径
配置本地NDK(已经弃用)
local.properties1
2ndk.dir=D\:\\android_sdk_4\\ndk\\21.3.6528147
sdk.dir=D\:\\android_sdk_4指定NDK版本为本地的版本(推荐)
build.gradle
1 | android { |
3. 不识别 ‘uint32_t’
IDE提示红色错误:Unknown type name ‘uint32_t’,这个错误是由于我把CPP的代码放进一个Library Module
(手动创建CMakeLists.txt等编译环境),而Library Module
没有include 到Ndk C++库:“\toolchains\llvm\prebuild\windows-x86_64”
.
更正的方法就是将CPP代码放在 Phone Module
中编译,创建项目选择 Phone Module
时,选择 Native C++
会自动include Ndk C++库。
用 Android Studio 创建Library Module ,是不能创建一个C++的Module的。