在c/c++用调用java代码步骤


1.创建一个工程

2.在设置-workspace中设置UTF-8

3.在设置-Android-NDK中,添加ndk工具开发

4.添加native依赖,选中项目名-Android Tools-art native support,命名一下,如(hehe),会生成jni目录

5.写一个显示c++代码里面返回的字符串
6.//写一个Button按钮
public void cppReflectAccessField(View view){
    //此处调用接口方法使用
    getNativeText();
}

7.写一个native接口方法
//例子是返回值是String类型
public native void nativeCppReflectAccessField();

8.在项目文件夹根目录app下,打开命令行,输入
javah -d..\jni cn.android.hellojni.MainActivity//全类名


9.回到项目刷新一下,会多一个.h文件

10.在.cpp文件中,写入
#include "cn_android_hellojni_MainActivity.h"

11-1.在.cpp文件中,实现 字段
//反射访问Java里面的字段
JNIEXPORT void JNICALL java_cn_android_hellojni_MainActivity_nativeCppReflectAccessField//此处nativeCppReflectAccessField为步骤 7 中的接口方法;
    (JNIEnv * env,jobject jo){//JNIEnv * 代表指针,指针:指向内存的地址;
    //获取类的定义
    jclass clazz = env->GetObjectClass(jo);
    //获取字段的定义
    jfieldID field = env->GetFieldID(clazz,"mInt","I");//类的定义,字段的定义,整型的字段,签名是I
    //获取字段值
    jint value = env->GetIntField(jo,field);
    //打印日志
这里注意:1、需要在本类上面添加
        #include <stdio.h>
      2、使用sprintf来获取字符串
        char msg[100];
        sprintf(msg,"C++反射获取的mInt:%d",value);
        _android_log_write(ANDROID_LOG_INFO,"MainActivity的test",msg);
    }



11-1.在.cpp文件中,实现方法
//反射访问Java里面的方法
JNIEXPORT void JNICALL java_cn_android_hellojni_MainActivity_nativeCppReflectAccessField//此处nativeCppReflectAccessField为步骤 7 中的接口方法;
    (JNIEnv * env,jobject jo){//JNIEnv * 代表指针,指针:指向内存的地址;
    //获取类的定义
    jclass clazz = env->GetObjectClass(jo);
    //获取方法的定义
    jmethodID method = env->GetMethodID(clazz,"fangfaming","(Ljava.lang.String;)V");//类的定义,方法的定义,方法的签名,可通过在项目文件夹根目录app下,打开命令行,输入javap -s -p cn.android.jnihello.MainActivity获取
    //调用方法 //打印日志
    jint value = env->CallVoidMethod(jo,method,env->NewStringUTF("C++帮我打日志"));
    
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值