AndroidJniDemo1

安卓对c进行so文件打包,并以jni的形式进行调用

项目中的部分

app : 编译so文件

jniDemo: 添加运行so文件

开发环境:

android studio 3.0.1

(As3.0以上创建项目,选择支持c/c++,项目会自动生成需要的配置,不需要在编写cMakeList文件,创建后,直接运行,即可调用cpp里面c文件的内容)

配置ndk

谷歌官方下载 https://developer.android.google.cn/ndk/downloads/

android studio的sdk manager里下载

(直接在file——project structure——sdk——ndk 点击download,有可能存在文件缺失,建议官方下载,在ndk里面配置)

打包so

把Native方法提取出来,在一个类里面专门处理,如jniUtil.java

运行app,点击工具栏 build-make"app",在app/build/intermediates/cmake/debug下可以看到生成的so文件,把他们拷贝出来,给JniDemo使用。

注意:

jniUtil里面的包名要和cpp里面c文件的方法名的包名一致,一般我们现在jniUtil里面写好方法后,点击alt+enter生成c方法,这样不易出错

调用jni

在jniDemo里面新建文件夹jnilibs,把so文件的几个文件放在里面,在gradle配置

配置gradle

sourceSets.main{

jni.srcDirs = []

jniLibs.srcDir "src/main/jniLibs"

}

创建方法类(包名类名要和so里面的一致)

在java中创建与上面jniUtil.java相同的包,并把jniUtil.java拷到次目录。

##备注

3.配置动态连接库的名称,在mode的gradle->defaultConfig下增加以下代码

ndk {

moduleName "JNITest" //输出的SO文件名称

abiFilters "armeabi", "armeabi-v7a", "x86"//指定cpu的类型

}

4.加载动态连接库,在编写native方法类中新增:

static

{

System.loadLibrary("native-lib");//名字注意,需要跟你的build.gradle ndk节点下面的名字一样

}

gradle设置so库名

defaultConfig {

applicationId "com.ndk.****"

minSdkVersion 19

targetSdkVersion 26

versionCode 1

versionName "1.0"

ndk {

moduleName "LJPriject" //输出的SO文件名称

abiFilters "armeabi-v7a","x86"//指定cpu的类型

}

}

so库名Library

System.loadLibrary导入,如果build.gradle ndk没有配置,那么要和CMakeLists里面一样,Sets the name of the library后面的名字,否则出现导入库失败,查找不到该库

android调用so封装jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓对c进行so文件打包,并以jni的形式进行调用...相关推荐

  1. 将做好的py文件打包成模块,供别人安装调用

    现在要将写完的3个py文件,打包. 步骤: 1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi. 2.将上面4个py文件拷贝至financeapi文 ...

  2. android标记 pdf,PDF标记篇二:安卓手机怎样在pdf文件中做标记

    原标题:PDF标记篇二:安卓手机怎样在pdf文件中做标记 在日常办公中,常常需要给pdf文件添加一些标记,为的是给文本做些说明或者让重点更加明显.电脑上做标记非常简单,不用小编多说!这里小编要说的是在 ...

  3. c++封装so库,供安卓android调用

    文章目录 一.概述 二.用C/C++开发出Linux的so库 1.开发分析: 2.开发准备: 三.在C/C++代码里加入JNI,支持java通过JNI调用so库 1.JNI 是Java Native ...

  4. android 很多牛叉布局github地址(转)

    原文地址 http://blog.csdn.net/luo15309823081/article/details/41449929 点击可到达github-------https://github.c ...

  5. android 很多牛叉布局github地址

    点击可到达github-------https://github.com/Trinea/android-open-project 包括ListView.ActionBar.Menu.ViewPager ...

  6. Android开源项目分类汇总 - GitHub

    Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  7. Android线程池封装库

    目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...

  8. Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...

  9. Android 二次封装网络加载框架

    Android 二次封装网络加载框架 写在最前面 开发当中,在请求网络的时候,大家或多或少都会使用一些第三方框架,Android-Async-Http. Volley.XUtils.Okhttp.Re ...

最新文章

  1. 通俗理解条件熵-数学
  2. 聊聊storm的AggregateProcessor的execute及finishBatch方法
  3. 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
  4. Docker容器相关命令
  5. 受显微镜下线虫启发,MIT人工智能实验室推出“液态”神经网络
  6. Decorator pattern
  7. PostgreSQL · 特性介绍 · 全文搜索介绍
  8. 004 IOC---IOC容器
  9. 面向视频原生,火山引擎发布视频云与边缘云软硬一体的新云解决方案
  10. JAVA的思维逻辑_[Java教程]计算机程序的思维逻辑
  11. SICP 1.20经验
  12. oracle 布尔转换java布尔_java 布尔值一种赋值方法
  13. 抓住那头牛(信息学奥赛一本通-T1253)
  14. 安装thinkphp,其实就是下载thinkphp,然后放到网站根目录下就可以直接使用了。
  15. 全球软件巨头 Software AG 遭勒索攻击
  16. HyperVolume多目标评价指标概述
  17. python 截取字符串的某一个字符
  18. NOD32企业版授权文件过期后的应急处理(病毒病义更新)
  19. 神经网络在线和离线的区别,神经网络网站
  20. kafka消费者报错:Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].

热门文章

  1. mysql+cast+0x_mysql cast与convert 函数的用法
  2. java holdslock_一种检测Java并发程序代码分支路径lock是否遗漏的方法
  3. 前端使用正则表达式从接口地址栏取值并将对应的值展示在页面上
  4. CMD启动mysql服务“发生系统错误 5”的解决办法
  5. 解决谷歌浏览器F12打不开调试页面的问题。
  6. 《Bash 脚本教程》免费发布啦,开源!
  7. linux中第一个进程的形成,Linux进程管理
  8. vue组件详解(一)——组件与复用
  9. css实现鼠标覆盖显示大图
  10. CF888G XOR-MST 最小异或生成树