Android Java访问本地方法(JNI)

本文详细介绍了如何在Java中调用本地代码,包括加载本地库、声明本地方法及调用流程。并通过示例展示了Java对象如何传递给本地方法。

当功能需要本地代码实现的时候,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层

转载于:https://www.cnblogs.com/lialong1st/p/8989847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值