Android Java访问本地方法(JNI)
当功能需要本地代码实现的时候,Java 代码就需要调用本地代码。
在调用本地代码时,首先要保证本地代码被加载到 Java 执行环境中并与 Java 代码连接在一起,这样 Java 代码在调用本地方法时能保证找到并调用到正确的本地方法,然后在 Java 中要显示声明本地方法为native 方法。
实现步骤如下:
1、编写 Java 代码,在 Java 代码中加载本地代码库。
2、在 Java 中声明本地方法。
3、调用本地方法。
public class HelloJNI {
static {
// 通过 System.loadLibrary() 来加载本地代码库
System.loadLibrary("hellojni");
}
// 由于该方法的实现在本地代码中,所以要加上 native 关键字进行声明
private static native String getJNIHello();
public static void main(String args[]) {
// 调用本地方法
System.out.println(HelloJNI.getJNIHello());
}
}
在 Java 中加载本地代码库的系统方法 System.loadLibrary 在 static 静态代码块中实现的,这是因为静态代码块只会在 Java 类加载时调用,并且只会别调用一次,本地代码库的名字为 hellojni,其对应的文件名为 libhellojni.so。
在 JNI 中,Java 对象一般都是作为参数传递给本地方法的。
Java 代码:
class PassJavaObj {
static {
System.loadLibrary("native_method");
}
private static native void passObj(String str);
public static void main(String arg[]) {
// 调用本地方法,并传递字符串给本地方法
passObj("Hello World");
}
}
本地代码:
// env 表示当前代码的运行环境,由 Java 运行环境自动传递过来
// thiz 表示调用本地方法的对象,由 Java 运行环境自动传递过来
// str 表示 Java 传递下来的字符串
void JNI_passObj(JNIEnv *env, jclass thiz, jobject str)
{
... ...
}
Android 从上层到底层-----app层
Android Java访问本地方法(JNI)的更多相关文章
- Android无法访问本地服务器(localhost/127.0.0.1)的解决方案
[Android无法访问本地服务器(localhost/127.0.0.1)的解决方案] 在Android开发中通过localhost或127.0.0.1访问本地服务器时,会报Java.NET.Con ...
- java调用本地方法的时候报错 could not find the main class:xx.program will exit
如图所示,当在java调用本地方法的时候报错 我的解决办法是把dll文件放到System.out.println(System.getProperty("java.library.path& ...
- Java 访问 C++ 方法:JavaCPP
JavaCPP提供了在Java中高效访问本地C++的方法.采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM. JavaCPP提供了一系列的Annotatio ...
- java native本地方法详解(转)
文章链接出处: 详解native方法的使用 自己实现一个Native方法的调用 JNI 开始本篇的内容之前,首先要讲一下JNI.Java很好,使用的人很多.应用极 广,但是Java不是完美的.Java ...
- Android无法访问本地服务器(localhost)的解决方案
在Android开发中通过localhost或127.0.0.1访问本地服务器时,会报java.net.ConnectException: localhost/127.0.0.1:8083 -Conn ...
- ANDROID模拟器访问本地WEB应用
一个早上就是想让android的模拟器可以访问到web的应用程序,但是一直是不可以,弄的不知所措. 在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的 ...
- [020] Android模拟器访问本地Web应用
本篇文章试图解决这样一个问题:如何在Android模拟器上访问本地的Web应用? 例如,在你的开发机器上启动一个Tomcat服务,接着打开电脑上的浏览器,默认情况下输入http://localhost ...
- Java调用本地方法又是怎么一回事
JNI JNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少 ...
- ANDROID模拟器访问本地WEB应用10.0.2.2
在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务,但是如果我们在Android模拟器中也采用同样的地址来访问,Android模拟器将无法正 ...
随机推荐
- Date类型
1.创建日期对象 var now = new Date(); var someDate = new Date(Date.parse("May 25, 2004")); var so ...
- iptables详解(12):iptables动作总结之一
前文一直在介绍iptables的匹配条件,并没有对动作进行过总结,那么此处,我们就来总结一下iptables中的动作. 之前的举例中已经用到了一些常用动作,比如ACCEPT.DROP.REJECT等. ...
- Linux中jar包指定端口启动并记录日志
Linux中jar包指定端口启动并记录日志: java -jar -Dserver.port=38080 group-buying-0.0.1-SNAPSHOT.jar >log.log ...
- JAVA运行war包
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m java %JAVA_OPTS% ...
- opencv:图像的基本变换
0.概述 图像变换的基本原理都是找到原图和目标图的像素位置的映射关系,这个可以用坐标系来思考,在opencv中, 图像的坐标系是从左上角开始(0,0),向右是x增加方向(cols),向下时y增加方向( ...
- QT帮助文档 英文
http://doc.qt.io/archives/qtquick-components-symbian-1.1/qml-button.html
- 在pycharm中自定义模板代码,快速输出固定代码块
pycharm中有时会经常输出固定一段代码,为避免每次重复输入,可以自定义一段模板代码,请看以下图教程: 1. 点击 file 里面的 setting 2. 在搜索框输入live,就会显示出 ...
- Mysql数据库的增删改查
在运行程序之前需要在mysql数据库中创建test数据库,如下图所示: 下面是具体是实现程序: package News; import java.sql.Connection; import jav ...
- Python中的数据结构 --- 元组(tuple)、字典(tuple)
元组(tuple)本身是不可变数据类型,没有增删改查:元组内可以存储任意数据类型一.元组的创建 例:t = (1,2.3,'star',[1,2,3]) ## 元组里面包含可变类型,故 ...
- jquery 判断checkbox状态
jquery判断checked的三种方法:.attr('checked): //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('c ...