这里写代码片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文件的更多相关文章

  1. Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转

     Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...

  2. Android开发--数据存储之File文件存储

    转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...

  3. android开发中调用python代码(带参数)

    android开发主要用到的是java代码,但是当开发涉及到一些算法时,往往用python可以提高软件的运行速度,也更加便捷,这里分享自己项目调用python代码的方式,主要有以下几个步骤(个人方法, ...

  4. Android开发——进程间通信之Bundle和文件

    0.  前言 不论是Android还是其他操作系统,都会有自己的IPC机制,所谓IPC(Inter-Process Communication)即进程间通信.首先线程和进程是很不同的概念,线程是CPU ...

  5. 在Android开发中调用Rest web服务(转)

    首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...

  6. [转]World Wind Java开发之五——读取本地shp文件

    World Wind Java 使用IconLayer图层类表现点和多点数据,使用RenderableLayer图层表现线和面数据,一个图层只能对应一组shape文件.World Wind Java首 ...

  7. World Wind Java开发之五——读取本地shp文件(转)

    http://blog.csdn.net/giser_whu/article/details/41484433 World Wind Java 使用IconLayer图层类表现点和多点数据,使用Ren ...

  8. Android开发之获取本地视频和获取自拍视频

    1.获取本地所有视频 public void getLoadMedia() { Cursor cursor = UILApplication.instance.getApplicationContex ...

  9. Android 开发笔记“调用.net webservice遇到的问题”

    1.An exception occurred: org.ksoap2.SoapFault SoapFault - faultcode: 'soap:Server' faultstring: '服务器 ...

随机推荐

  1. MFC中对话框的各种消息触发时间

    小结:WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个状态肯定是在调用ShowWindows()显示窗口之前.WM_WM_IN ...

  2. LAMP漫长编译安装

    传说中的LAMP :Linux+Apache+MySQL+Python/Perl/PHP,Linux上安装方式:RPM和源码安装,源码安装要依赖包安装,可以定制安装 首先安装编译工具 yum inst ...

  3. CISP/CISA 每日一题 10

    CISA 每日一题(答)一个合理建造的数据仓库应当支持下列三种基本的查询格式: 1.向上溯源和向下溯源——向上溯源是对数据进行总计:向下溯源是将数据进行细化: 2.交叉溯源——通过通用属性访问数据仓库 ...

  4. linux又一次编译安装gd,添加freetype支持,解决验证码不显示问题,Fatal error: Call to undefined function imagettftext()

    问题: Fatal error: Call to undefined function Think\imagettftext() in /var/www/webreg/ThinkPHP/Library ...

  5. android屏幕适配方案

    曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手 ...

  6. 无法显式调用运算符或访问器 错误处理方法 DLL study

    无法显式调用运算符或访问器 错误处理方法 转 无法显式调用运算符或访问器 错误处理方法 反汇编一个dll类库,导出的项目会报出很多bug,其中主要的就是“无法显式调用运算符或访问器”这个错误,看了一下 ...

  7. 01011_怎么打开任务管理器?win7打开任务管理器方法

    以下几种方法可以打开任务管理器 1.在系统的任务栏点击鼠标右键,然后在弹出的右键菜单中选择“启动任务管理器”: 2.同时按下这三个按钮:Ctrl + Shift + Esc: 3.同时按下键盘的Ctr ...

  8. JSP与Servlet的介绍说明

    什么是Servlet和JSP 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP. Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是 ...

  9. [读书笔记]Java类载入过程

    一. 类的生命周期 类从被载入到虚拟机内存中開始,到卸载出内存为止,有下面(如图)的生命周期: 以上"载入->验证->准备->解析->初始化"称为类的载入过 ...

  10. StackExchange.Redis 官方文档(六) PipelinesMultiplexers

    原文:StackExchange.Redis 官方文档(六) PipelinesMultiplexers 流水线和复用 糟糕的时间浪费.现代的计算机以惊人的速度产生大量的数据,而且高速网络通道(通常在 ...