Android 开发--CMakeList调用本地so文件
来源:互联网 发布:网络打印机添加ip 编辑:程序博客网 时间:2024/05/22 16:45
这里写代码片
Android开发常常遇到java调用so文件的情况,本文介绍一下Google最近新推出的应用在android studio中的方法–cmakelist.txt格式调用。
so文件分为jni格式的和非jni格式的,java只能调用jni格式的so文件。本文介绍的是针对ndk生成的非jni格式的so文件调用。
首先是对非jni格式的so文件进行处理,声明一个.h文件,将so文件中的方法包进去,之后将.h文件和so文件放在一个目录下(之后需要对目录进行设置),在系统生成的native-lib.cpp中实现对该so文件的调用,即将.h文件包进去就可以调用so文件中的方法。java采用
System.loadlibraty("native-lib")
的方法,即可对native-lib.cpp方法的调用。
下图是我实例的结构图:
其关键是CMakeList.txt和app下的gradle的设置
gradleandroid {
compileSdkVersion 24
buildToolsVersion “24.0.3”
defaultConfig {
applicationId “com.zfq.anew”
minSdkVersion 19
targetSdkVersion 24
versionCode 1
versionName “1.0”
#设置so文件的ABI类型
abiFilters 'armeabi' //abiFilters 'armeabi', 'armeabi-v7a' } testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { arguments '-DANDROID_PLATFORM=android-19', '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static' } } }
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }// 设置so文件路径 sourceSets { main { // let gradle pack the shared library into apk //jniLibs.srcDirs = ['../distribution/plus/lib'] //jniLibs.srcDirs =[] jniLibs.srcDirs = ['../distribution/plus/lib'] } }//设置cmakelist路径 externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12'}``
下面是CMakelist设置
cmake_minimum_required(VERSION 3.4.1)**#设置cmakelist的目标路径``**set(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../distribution)#增加Cpp动态共享库add_library( native-lib SHARED native-lib.cpp )#增加so文件动态共享库,${ANDROID_ABI}表示so文件的ABI类型的路径add_library(wzh033 SHARED IMPORTED)set_target_properties(wzh033 PROPERTIES IMPORTED_LOCATION${distribution_DIR}/plus/lib/${ANDROID_ABI}/libwzh033.so)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")#增加include包含的路径target_include_directories(native-lib PRIVATE ${distribution_DIR}/plus/include)#生成链接动态库target_link_libraries( native-lib wzh033 android ${log-lib} )
“`
参考文献:
(locationNum=6http://blog.csdn.net/eastmoon502136/article/details/52806640)
http://blog.csdn.net/ddjjll8877/article/details/52670097?
https://developer.android.com/studio/projects/add-native-code.html#new-project
- Android 开发--CMakeList调用本地so文件
- Android中生成调用本地so文件
- Android 调用.so文件 jni
- Android Studio 调用.so文件
- Android 调用.so文件 jni
- Unity Android调用.so文件
- android java文件调用.so文件
- android java文件调用.so文件
- android java文件调用.so文件
- Android NDK(二):配置CMakeList文件
- Android NDK 生成、调用so文件
- Android工程JNI调用*.so文件加载
- Android studio调用.so库文件
- android中调用so文件出错
- android调用第三方so库文件
- android NDK开发及调用标准linux动态库.so文件
- android NDK开发及调用标准linux动态库.so文件
- android NDK开发及调用标准linux动态库.so文件
- 8086指令(II)
- 词法分析器生成工具flex
- java中File类总结
- 云盘暂放
- c++ cin的用法详解 对缓冲区的说明
- Android 开发--CMakeList调用本地so文件
- python 中json小记
- CSAPP lab3 bufbomb
- C语言函数的递归
- Python 内置函数 —— format
- centos 6 NFS 搭建
- 配置远程工具访问kubernetes集群
- Picasso和Glide的介绍及比较
- JAVA-main方法