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

2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新注册的微信号被实名认证了怎么办 他出轨对我冷暴力孩子小怎么办 给情人发红包被老婆发现了怎么办一 情人和我出轨被他老婆发现了怎么办 情人老婆再次发我的存在怎么办 给情人还了账他老婆不承认怎么办 天堂1游戏限制IP登录次数怎么办 网易手机将军令绑不了太多号怎么办 当发生噩梦、梦魇等情况时该怎么办 出车祸后全保对方在家里来闹怎么办 轮胎正面凹槽被划了口子怎么办 机票已经买完了护照丢了怎么办 买完机票后护照丢了怎么办 填简历时籍贯写了汉怎么办 深圳公租房住满5年后怎么办 深圳公租房住满6年后怎么办 没单位了个人不想交社保怎么办 北京公租房住满5年后怎么办 部落冲突怎样看账号密码忘了怎么办 摩托车闯红灯4次扣24分怎么办 星巴克金星级会员到期了怎么办 2018年驾照到期换证色弱怎么办 怀孕5个月咳嗽有痰怎么办 广州驾照换证体检视力不过怎么办 驾照12分扣完了怎么办费用标准 驾照体检出绿色盲不能补证怎么办 在交警队驾驶员陈述笔录写错怎么办 学驾照做体检把电话填错了怎么办 驾考中心考场停考预约的考试怎么办 口令卡绑定第一次身份证输错怎么办 第一次去医院看病没带身份证怎么办 考科目二紧张怎么办如何消除紧张 考科目三紧张怎么办如何消除紧张 我的驾考准考证和发票丢了怎么办 科目二预约考试下一步点不了怎么办 护士资格证未注册过期没注册怎么办 上海护士延续体检有乙肝携带怎么办 护士资格证从诊所变更到医院怎么办 杭州驾考预约面授没有去怎么办 在外地考的驾驶证丢了怎么办 身份证和驾驶证在外地丢了怎么办