JNI的开发步骤
使用C函数实现Java本地方法:
1. 在java代码里面声明一个native的方法
public native String helloFromC();
2. 在工程目录下面创建一个jni的文件夹
3. 在jni文件夹里面编写c代码,实现java的本地方法
//JNIEnv* envJNI本地接口这个结构体的二级指针
//该结构体中封装了很多函数指针方便程序员开发jni代码
//jobject obj MainActivity的对象,调用者对象
jstring Java_包名_类名_方法名(JNIEnv* env,jobject obj){}
编译运行C函数,生成so可执行文件:
4. 在jni文件夹下创建Android.mk文件,c代码编译的脚本文件
# $表示调用ndk中定义好的方法或者变量
# 加载本地的jni目录,当在dos窗口中执行ndk-build命令时,会找工程目录下中的jni目录;
LOCAL_PATH := $(call my-dir)
# 下次重新生成动态库时,清理掉上次生成的变量
include $(CLEAR_VARS)
# 指定生成的动态库的名称,生成动态库文件后,文件名为libhello.so
LOCAL_MODULE := hello
# 指定了本地的c文件
LOCAL_SRC_FILES := Hello.c
# 指定了生成库的类型:BUILD_SHARED_LIBRARY表示动态库.so,BUILD_STATIC_LIBRARY表示静态库.a
# 动态库.so文件小,静态库.a文件大。
include $(BUILD_SHARED_LIBRARY)
5. 调用ndk-build指令编译c代码
注意配置环境变量生成一个.so的文件 ( c代码编译出来的二进制可执行文件)
6. 在java代码里面写静态代码块,加载so文件
static{
System.loadLibrary("hello");
}
7. 像使用一般java方法一样调用native的方法.
JNI的开发步骤的更多相关文章
- Android(java)学习笔记262:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- Android(java)学习笔记206:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- Android(java)学习笔记259:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...
- Android(java)学习笔记203:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...
- Android jni简便开发流程
<Android jni helloworld>中介绍了开发jni helloworld的步骤,本文将介绍jni简便开发流程 ① 写java代码 native 声明本地方法 ② 添加本地支 ...
- NDK---使用,开发步骤
使用NDk的场景: 1.某些方法,是使用C,C++本地代码实现的,然后,我想在Java中调用这些方法.这个时候,就需要使用到JNI技术. 应用NDK的时候,分两个部分,Java部分,JNI层部分,本地 ...
- 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...
- iOS应用内付费(IAP)开发步骤列表
iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...
- JNI 程序开发
参考资料: http://blog.csdn.net/wwj_748/article/details/28136061 JNI_最简单的Java调用C/C++代码 http://blog.csdn.n ...
随机推荐
- Asp.Net MVC4 使用Unity 实现依赖注入
项目创建参考 上一篇 <<Asp.Net MVC5 使用Unity 实现依赖注入>>, 不同的是这里是 Unity.MVC4 装好后会出现 然后示例说在这里写对应关系 ...
- C++ SQLite的使用总结
SQLite3简介 SQLite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比Mysql还快,专门用于移动设备上进行适量的数据存取,它只是一个文件,不需要服务器进程. SQL语句是SQL ...
- 洛谷P3690 Link Cut Tree (动态树)
干脆整个LCT模板吧. 缺个链上修改和子树操作,链上修改的话join(u,v)然后把v splay到树根再打个标记就好. 至于子树操作...以后有空的话再学(咕咕咕警告) #include<bi ...
- canvas制作圆形动态加载进度实例
window.onload=function(){ var loading=document.getElementById('loading'); var context=loading.getCon ...
- 查看python包的安装目录
步骤二: 如果是从python 的command line 里面查看,可以使用如下命令(python 3.x) import sys print(sys.path) 1 2
- 解决boot项目创建后启动日志报错
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</ ...
- this 的用法 为原始类型扩展方法
namespace Demo { public static class Extends { // string类型扩展ToJson方法 public static object ToJson(thi ...
- BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基
BZOJ严重卡精,要加 $long$ $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...
- VirtualBox:无法访问共享文件夹
造冰箱的大熊猫@cnblogs 2019/5/9 问题:VirtualBox中安装Linux虚拟机,设置宿主机某个文件夹为虚拟机的共享文件夹.在虚拟机中,该共享文件夹显示为“sf_×××”,打开该文件 ...
- python 中type和object的关系
转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...