当功能需要本地代码实现的时候,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)的更多相关文章

  1. Android无法访问本地服务器(localhost/127.0.0.1)的解决方案

    [Android无法访问本地服务器(localhost/127.0.0.1)的解决方案] 在Android开发中通过localhost或127.0.0.1访问本地服务器时,会报Java.NET.Con ...

  2. java调用本地方法的时候报错 could not find the main class:xx.program will exit

    如图所示,当在java调用本地方法的时候报错 我的解决办法是把dll文件放到System.out.println(System.getProperty("java.library.path& ...

  3. Java 访问 C++ 方法:JavaCPP

    JavaCPP提供了在Java中高效访问本地C++的方法.采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM. JavaCPP提供了一系列的Annotatio ...

  4. java native本地方法详解(转)

    文章链接出处: 详解native方法的使用 自己实现一个Native方法的调用 JNI 开始本篇的内容之前,首先要讲一下JNI.Java很好,使用的人很多.应用极 广,但是Java不是完美的.Java ...

  5. Android无法访问本地服务器(localhost)的解决方案

    在Android开发中通过localhost或127.0.0.1访问本地服务器时,会报java.net.ConnectException: localhost/127.0.0.1:8083 -Conn ...

  6. ANDROID模拟器访问本地WEB应用

    一个早上就是想让android的模拟器可以访问到web的应用程序,但是一直是不可以,弄的不知所措. 在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的 ...

  7. [020] Android模拟器访问本地Web应用

    本篇文章试图解决这样一个问题:如何在Android模拟器上访问本地的Web应用? 例如,在你的开发机器上启动一个Tomcat服务,接着打开电脑上的浏览器,默认情况下输入http://localhost ...

  8. Java调用本地方法又是怎么一回事

    JNI JNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少 ...

  9. ANDROID模拟器访问本地WEB应用10.0.2.2

    在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务,但是如果我们在Android模拟器中也采用同样的地址来访问,Android模拟器将无法正 ...

随机推荐

  1. su | sudo su | sudo -i

    su <user> <user> <user> 需要输入user的密码,该命令改变user id,执行过后,以<user>中定义的用户运行shell,就 ...

  2. HDU 4734 F(x) ★(数位DP)

    题意 一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少 ...

  3. iOS自动化探索(七)自动化测试框架pytest - 测试报告

    这里我们单独来看下关于如何生存测试报告 准备测试代码如下: #coding: utf- import pytest @pytest.fixture() def login(): print '输入账号 ...

  4. canvas 画布 文字描边

    总结一下,canvas 画布 文字描边的2种方法以及其不同的视觉效果: 效果图: 具体代码: <canvas id="canvas" width="800" ...

  5. AndroidStudio构建常见错误解答解决思路

    一.Error:Configuration with name 'default' not found.解决思路 出现这问题的原因是你依赖的工程没有make project,意思是你导入项目的工程没有 ...

  6. 为什么叫金拱门- golden arch

    不要再纠结为什么叫这么难理解的名字了.因为从golden arch直译过来的撒.金色的拱门.就叫金拱门咯. 关于M的商标的历史来源如下: "McDonald's logo" red ...

  7. ECMAScript 6.0 学习笔记

    1.ECMAScript 6.0(也就是ES2015 以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得 JavaScript 语言可以用来 ...

  8. Java Ioc详解和实现

    作者:竹竿 这章我们讲Java Spring的Ioc控制反转, DI依赖注入. 阅读此文之前,必须深入理解Java反射原理. 1. Ioc控制反转 原来类对象实例的创建都是有程序员自己通过new进行的 ...

  9. Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库

    在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" e ...

  10. C#中PadLeft和PadRight小知识点

    当我们显示字符串数据时,有时候我们需要考虑数据的排列美观. 比如一些人名和一些编号,我们想让他们整齐对齐显示等. C# String类提供了2种操作方法: String.PadLeft(int tot ...