NCNN 是騰訊提供的移動端框架 非常適合在手機玩寞钥,下面是一個安卓的demo 以便更好的熟悉和使用NCNN。
下載地址:https://github.com/chentyjpm/MobileNetSSD_Demo_AndroidNCNN
問題1:最近在運行MNN的一個工程雷激,ndk從17升級到21后, 出現(xiàn)"android dlopen failed library libomp.so not found"錯誤告私,這通常是因為動態(tài)庫文件libomp.so沒有被正確加載導(dǎo)致的屎暇。
解決方案也很粗暴,直接將NDK里libomp.so拷貝到自己工程目錄'src/main/jniLibs' 下驻粟,即可解決問題根悼。
比如我使用的是NDK版本是:android-ndk-r21e,可直接從ndk r21中拷貝一份libomp.so到手機目錄上
libomp.so可以在ndk里面找一下,所在目錄大概是
android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/9.0.8/lib/linux/aarch64/libomp.so
至于拷貝哪個處理器版本番挺,需要根據(jù)你的平臺選擇,一般在abiFilters會指定 "armeabi-v7a", "arm64-v8a"平臺屯掖,拷貝對應(yīng)的版本即可玄柏;如果不存在,可以復(fù)制其他平臺的libomp.so代替試試贴铜。
拷貝的目的地址粪摘,由jniLibs.srcDirs指定so庫的位置:
增加路徑
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.so'])
}
jniLibs.srcDirs = ['src/main/jniLibs', 'libs']
問題2:Android Studio命令行編譯提示Unable to make field private final java.lang.String java.io.File.path accessib
解決方案:修改gradle.properties文件
新增下面代碼:
-Dfile.encoding=UTF-8 --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMEDz
再次編譯(gradlew.bat build --info),結(jié)果如下:
BUILD SUCCESSFUL in 365ms
問題3:Error:CMake '3.10.2' was not found in PATH or by cmake.dir property. CMake '3.10.2' found in SDK did
解決方案:
下載CMake
然后配置:
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
最終demo效果