美文网首页
NDK-JNI访问Java变量和方法

NDK-JNI访问Java变量和方法

作者: 伊泽瑞额 | 来源:发表于2020-02-20 12:24 被阅读0次
    JNI访问Java成员变量

    1.定义成员变量textStr

        //1. 定义变量textStr
        public String textStr ="hello ndk";
    

    2.添加native方法accessField():

       //2. 定义native 方法 accessField();
        public  native  void accessField();
    

    3.选中accessField,按 Alt+Enter快捷添加.cpp中方法Java_com_example_myapplication_MainActivity_accessField

    
        //获取类
        jclass jcla = env->GetObjectClass(instance);
        //获取成员变量 textStr  得id
        jfieldID jfield = env->GetFieldID(jcla, "textStr", "Ljava/lang/String;");
    
        jstring  changeText=env->NewStringUTF("hello word ndk");
    
        //修改属性id 对应得值
        env->SetObjectField(instance,jfield,changeText);
    
    JNI访问Java静态变量

    同上添加静态属性和 native方法:

        public static  String staticText="static str";
        
        public native  void accessStaticField();
    

    按 Alt+Enter快捷添加.cpp中方法Java_com_amn_amn_ndk_102_MainActivity_accessStaticField

        //1.获取类
       jclass  jcla=env->GetObjectClass(instance);
    
       //2.获取静态变量id
      jfieldID  jfield=env->GetStaticFieldID(jcla,"staticText","Ljava/lang/String;");
    
       //3.根据静态变量id 修改值
       jstring  textChange=env->NewStringUTF("staticText is changed");
       env->SetStaticObjectField(jcla,jfield,textChange);
    
    
    JNI访问Java非静态方法

    同上添加Java非静态方法和 native方法:

        public native String accessMethod();
    
        public String getName(String name){
            Log.e(TAG, "name = " + name);
            return name;
        }
    

    .cpp文件

    //1. 获取类
        jclass jcla = env->GetObjectClass(instance);
        //2.获取方法 getName id   第二个参数:方法名  第三个参数:(参数)返回值 的类型描述
        jmethodID jmId = env->GetMethodID(jcla, "getName", "(Ljava/lang/String;)Ljava/lang/String;");
        //3.调用方法
        jstring jst = env->NewStringUTF("i am amn");
        jobject jobRes = env->CallObjectMethod(instance, jmId, jst);
    
        return static_cast<jstring >(jobRes);
    
    JNI访问Java静态方法

    添加静态方法和 native方法

    相关文章

      网友评论

          本文标题:NDK-JNI访问Java变量和方法

          本文链接:https://www.haomeiwen.com/subject/nbmbwctx.html