zoukankan      html  css  js  c++  java
  • 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层

  • 相关阅读:
    [luoguP2486] [SDOI2011]染色(树链剖分)
    [POJ3162]Walking Race(DP + 单调队列)
    [HDU3586]Information Disturbing(DP + 二分)
    [luoguP1280] 尼克的任务(DP)
    [luoguP1282] 多米诺骨牌(DP + 背包)
    AOJ 0558 Cheese【BFS】
    POJ 3009 Curling 2.0【带回溯DFS】
    AOJ 0033 Ball【DFS】
    AOJ 0118 Property Distribution【DFS】
    POJ 1979 Red and Black【DFS】
  • 原文地址:https://www.cnblogs.com/lialong1st/p/8989847.html
Copyright © 2011-2022 走看看