1. 程式人生 > >Android 7.0及以上使用OpenCL

Android 7.0及以上使用OpenCL

由於從Android 7.0, API 24, 開始, 系統將阻止應用連結至非公開NDK庫, 所以, 使用libOpenCL.so時與面向低版本的Android平臺有所不同, 需要把依賴的非公開NDK庫打包到APK中

確定依賴的庫

首先應該確定你所使用的libOpenC.so所依賴的庫, 使用命令objdump -x libOpenCL.so | grep NEEDED,
iI4jVH.png
這是在我的手機上面測試的情況, 那麼我們需要做的是從手機上面, 把這些庫全部pull出來, 然後打包到APK中. (在本例中, libc.so和libm.so是公開NDK庫, 可以不用打包, 所以下面中沒有打包)

打包依賴庫

先是從手機/system/lib/目錄下面把這些庫pull出來, 然後把他們全部放到AndroidStudio工程的jniLibs目錄下面,
iI4Oqe.png
然後在CMakeLists.txt中新增這些庫

add_library(libOpenCL SHARED IMPORTED )
set_target_properties(libOpenCL PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a/libOpenCL.so")
add_library(libcutils SHARED IMPORTED )
set_target_properties(libcutils PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a/libcutils.so")
add_library(libvndksupport SHARED IMPORTED )
set_target_properties(libcutils PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a/libvndksupport.so")
add_library(libc++ SHARED IMPORTED )
set_target_properties(libcutils PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a/libc++.so")

這樣應該就沒問題了, 如果執行時還有找不到庫的報錯, 按照同樣的方法新增對相應庫的依賴即可.