犀渠玉剑良家子,白马金羁侠少年。这篇文章主要讲述Android 开发--CMakeList调用本地so文件相关的知识,希望能为你提供帮助。
这里写代码片
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(wzh033PROPERTIES 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?
【Android 开发--CMakeList调用本地so文件】https://developer.android.com/studio/projects/add-native-code.html#new-project
推荐阅读
- android播放器(mediaplayer)
- 静态RAM和动态RAM差异比较(它们之间有哪些区别())
- Android和iOS的13大最佳语言翻译应用程序推荐合集
- 12个最佳PDF签名工具推荐合集(你知道哪些(哪个最好用?))
- 如何在iPhone XR上使用声音进行屏幕录制(2种有效方法)
- 如何在Windows 10 PC或笔记本电脑中禁用Microsoft Edge()
- 13款Android的最佳抖音视频编辑器应用推荐合集
- 如何在iPhone上打印短信(100%有效的方法介绍)
- 如何在Microsoft Edge上安装Google Chrome扩展(教程和指南)