JNI配置环境备忘录

开始

在Android Studio3.0中使用JNI非常方便, 基本配置可参考官方文档向现有项目添加 C/C++ 代码。但在实际使用中也会碰到一些问题, 在这里记录下。

ABI

ABI全称为Application Binary Interface,其定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库, 目前Android支持的七种不同的CPU架构:ARMv5、ARMv7、x86、MIPS、ARMv8,MIPS64和x86_64,每一种都关联着一个相应的ABI。具体可参考文章Android的.so文件、ABI和CPU的关系你必须知道的ABI和CPU关系

1. 在模块级build.gradle文件中使用ndk.abiFilters可指定支持的ABI配置,如:

android {
   ......
    defaultConfig{
       ......
        ndk {
            abiFilters 'armeabi', 'armeabi-v7a',                        'arm64-v8a'
            }
    }
}

2. 在利用CMake构建脚本中添加库的多个ABI版本时,可使用ANDROID_ABI路径变量,而不必编写多个命令, 例如库在如下目录中的libopencv_java3.so文件,


abi.png

则在CMakeLists.txt中使用./src/main/cpp/libs/${ANDROID_ABI}/libopencb_java3.so即可。

引用第三方库

例如应用opencv的库, 首先将编译好的so文件(或者a文件)和头文件引入项目,如放在cpp目录下。在CMakeLists.txt中添加:

include_directories(src/main/cpp/include)

添加opencv的头文件路径;第二步将需要的库引入,

add_library(lib_opencv STATIC IMPORTED )
set_target_properties(lib_opencv
                       PROPERTIES IMPORTED_LOCATION
                       /src/main/cpp/libs/${ANDROID_ABI}/libopencv_java3.so)

最后使用添加的库:

target_link_libraries(native-lib
                       android
                       lib_opencv)

常用的CMake知识点

1. cmakelists.txt文件路径为${CMAKE_SOURCE_DIR};

2. 设置常量,如将库路径命名为LIBS_PATH

set(LIBS_PATH ${CMAKE_SOURCE_DIR}/src/main/cpp/libs/)

3. 添加预定义宏

ADD_DEFINITIONS(-D宏名称 -D宏名称......)

4. 可利用ADD_SUBDIRECTORY添加子项目文件;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容