android C++ 和 jni,根据JNIEnv的FindClass获取java类,包括多线程

java代码

TestC.java

package com.example.testnativejava;

import android.util.Log;

public class TestC {
    
    private final static String tag = "TestC";
}

TestNativeJava.java

package com.example.testnativejava;

import android.util.Log;

public class TestNativeJava {

    private final String tag = "TestNativeJava";
    
    public TestNativeJava() {
        Log.d(tag, "new TestNativeJava");
    }
    
    public void ShowLog() {
        Log.d(tag, "show log entry");
        
        System.load("libtest_c_java.so");
        
        
        SayHello();
        Log.d(tag, "show log exit");
    }
    
    // jni 接口
    public native int SayHello();
}

下面是C&#

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的示例代码,可以通过 JNI 调用 Java 中 emo 的静态 int 型函数 A(),并获取返回值,然后将返回值打印出来: ```c++ #include <jni.h> #include <iostream> using namespace std; int main() { JavaVM *jvm; // Java 虚拟机实例 JNIEnv *env; // JNI 环境指针 JavaVMInitArgs vm_args; // Java 虚拟机初始化参数 JavaVMOption options[1]; // Java 虚拟机启动选项 jclass cls; // Java jmethodID mid; // Java 方法 ID jint result; // 返回值 // 设置 Java 虚拟机启动选项 options[0].optionString = "-Djava.class.path=./"; // 设置路径 vm_args.version = JNI_VERSION_1_6; // 设置 JNI 版本 vm_args.nOptions = 1; vm_args.options = options; vm_args.ignoreUnrecognized = JNI_TRUE; // 创建 Java 虚拟机实例 jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if (res != JNI_OK) { cout << "Error: Could not create Java VM." << endl; return 1; } // 获取 Java cls = env->FindClass("emo"); if (cls == nullptr) { cout << "Error: Could not find Java class." << endl; return 1; } // 获取 Java 方法 ID mid = env->GetStaticMethodID(cls, "A", "()I"); if (mid == nullptr) { cout << "Error: Could not find Java method." << endl; return 1; } // 调用 Java 方法 result = env->CallStaticIntMethod(cls, mid); // 打印返回值 cout << "Result: " << result << endl; // 销毁 Java 虚拟机实例 jvm->DestroyJavaVM(); return 0; } ``` 其中,假设 Java 名为 emo,静态 int 型函数名为 A(),并且将文件放在当前目录下。在程序中需要将路径设置为当前目录。 注意,这里使用的是 C++11 标准,如果使用的是早期的 C++ 标准,字符串字面量需要使用 char* 型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值