Android Java调用自己C++类库的实例讲解
Android Java 如何调用自己的 C++ 的类库
下面以 Java 调用 C++ 的加法运算函数为例,做简单说明。
(使用 Android Studio 3 编译)
首先编译 c++ 类库
创建独立目录存放 c++ 文件,例如 "app/src/main/cpp/add.cpp",内容如下
#include <jni.h> extern "C" JNIEXPORT jint JNICALL Java_com_example_liyi_demo_Util_add( JNIEnv *env, jobject, jint a, jint b ) { return a + b; }
被调用的函数命名必须是 "Java_<namespace>_<class>_<method>" ,此例表示Java 包 com.example.liyi.demo 下,Util 类的 add 方法将关联此 c++ 函数。
将上一步的 c++ 目录加入编译项。已 cmake 为例,将下面内容加入 CMakeLists.txt
add_library( native-util SHARED src/main/cpp/add.cpp )
这样可编译成 native-util.so 库。
在 Java 中调用
实现 Util 类。将如下内容存成 src/main/java/Util.java 文件
package com.example.liyi.demo; public class Util { static { System.loadLibrary(libname: "native-util"); } private native int add(int a, int b); public int java_add(int a, int b) { return add(a, b); } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果
用ThreadPoolExecutor的时候,又想知道被执行的任务的执行情况,这时就可以用FutureTask. ThreadPoolTask package com.paul.threadPool; import java.io.Serializable; import java.util.concurrent.Callable; public class ThreadPoolTask implements Callable<String>, Serializable { private s
-
Android四大组件之BroadcastReceiver详解
BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一. Android 广播分为两个角色:广播发送者.广播接收者 一. 作用 用于监听 / 接收 应用发出的广播消息,并做出响应 应用场景: 不同组件之间通信(包括应用内 / 不同应用之间) 与 Android 系统在特定情况下的通信(如当电话呼入时.网络可用时) 多线程通信 二.实现原理 Android中的广播使用了设计模式中的观察者模式:基于
-
Android四大组件之Activity详解
一.Activity的生命周期 首先,我们来了解一下Activity典型的生命周期 一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory().包含了六个部分,还有一个onRestart()没有调用, 下面就来一一介绍 onCreate():当 Activity 第一次创建时会被调用.当 Activity 第一次创建时会被调用.这是生命周
-
Android之线程池ThreadPoolExecutor的简介
Android中的线程池ThreadPoolExecutor解决了单线程下载数据的效率慢和线程阻塞的的问题,它的应用也是优化实现的方式.所以它的重要性不言而喻,但是它的复杂性也大,理解上可能会有问题,不过作为安卓工程师,了解这个也是必然的. ThreadPoolExecutor有几个构造函数,最多参数的构造函数最常用,下面会详细介绍各个参数的含义及其几个参数之间的关系: <span style="font-size:18px;">ThreadPoolExecutor(cor
-
Android可自定义神奇动效的卡片切换视图实例
前言 面对众多卡片层叠效果,我们的产品童鞋也突发奇想,搞出了另一种卡片层叠切换展示的交互,而且产品狗们居然要求多做几种动效给他们看,好让他们选择,这简直就是要搞事情啊,what are you 弄啥咧?! "哥哥我做不到啊.....啊.....呸",做为一名有节操的程序猿,自然是不能说出这么没有出息的话,哥就满足你们,于是,出了个可自定义动效的卡片切换视图,效果如下所示 思路 首先,要展示出卡片层叠的视觉效果.在这里,我们通过方块的缩放大小差异以及在Y方向上的位置差异,来展现这种视觉效
-
Android添加音频的几种方法
在res文件夹中新建一个文件夹,命名为raw.在里面放入我们需要的音频文件. 第一种: // 根据资源创建播放器对象 player = MediaPlayer.create(this, R.raw.xiaoxiaole); try { player.prepare();// 同步 } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOExcept
-
Java自带定时任务ScheduledThreadPoolExecutor实现定时器和延时加载功能
java.util.concurrent.ScheduledThreadPoolExecutor 是JDK1 .6之后自带的包,功能强大,能实现定时器和延时加载的功能 各类功能和处理方面优于Timer 1.定时器: ScheduledThreadPoolExecutor 有个scheduleAtFixedRate(command, initialDelay, period, unit) ;方法 command: 执行的线程(可自己New一个) initialDelay:初始化执行的延时时间 p
-
线程池ThreadPoolExecutor使用简介与方法实例
一.简介 线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) corePoolSize: 线程池维护线程的最少数量 maximumPool
-
Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法
1.问题 我们一般很多时候会需要在ubuntu终端上打印当前运行app的日志,我们一般常见的做法是 1).获取包名 打开当前运行的app,然后输入如下命令,然后在第一行TASK后面的就可以看到包名 adb shell dumpsys activity top 2).我们的终端安装了pidcat.py脚本,然后执行如下的命令就可以打印当前运行app的全日志, pidcat.py packageName 3).思考,为什么每次都需要这样重复的操作呢?一说到重复,我们应该立马想到是否可以用脚本解决重复
-
Android四大组件之Service详解
一.Service简介 Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件. Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务.Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作. 二.Serv
随机推荐
- docker搭建rabbitmq集群环境的方法
- JS中改变this指向的方法(call和apply、bind)
- Powershell批量给文件增加前辍实例
- jQuery Mobile开发中日期插件Mobiscroll使用说明
- java中子类继承父类,程序运行顺序的深入分析
- 简单谈谈Core Animation 动画效果
- Ionic2开发环境搭建教程
- 127.0.0.1无法访问,没有权限: GetObject
- C#实现无限级联下拉列表框
- PHP使用pcntl_fork实现多进程下载图片的方法
- 部署PHP时的4个配置修改说明
- jQuery学习笔记之回调函数
- Grunt入门教程(自动任务运行器)
- Android简单实现自定义流式布局的方法
- Android使用ViewPager实现图片滑动预览效果
- Android开发自学笔记(四):APP布局下
- PHP常用正则表达式集锦
- Angular 开发学习之Angular CLI的安装使用
- vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
- 详解基于 Node.js 的轻量级云函数功能实现