java - 未找到 Android NDK 方法...从 C++ 调用 Java

标签 java android c++ android-ndk

我想从 C++ 调用 Java 方法。我遵循了我发现的其他示例,但我不断收到错误消息:

GetMethodID: method not found: Lcom/test/ndk/GL2JNIActivity;.GetFiles:(L/java/lang/String;Ljava/lang/String;Z;)V

我在这里做错了什么?我怀疑我的方法签名字符串对于 env->GetMethodID() 是错误的,但从我见过的其他示例来看它看起来是正确的。

C++:

namespace Resource
{
FileInfo *GetFiles(const char *path, const char *mask, bool directory)
{
    JNIEnv *env = Android_JNI_GetEnv();
    jstring jstr1 = env->NewStringUTF(path);
    jstring jstr2 = env->NewStringUTF(mask);

    fileInfos = NULL;

    jclass clazz = env->FindClass("com/test/ndk/GL2JNIActivity");
    jmethodID mid = env->GetMethodID(clazz, "GetFiles", "(Ljava/lang/String;Ljava/lang/String;Z;)V");
    jobject obj = env->CallStaticObjectMethod(clazz, mid);

    return fileInfos;
}
}

Java:

package com.test.ndk;

import java.io.File;

public class GL2JNIActivity extends Activity implements SensorEventListener {

public static void GetFiles(String sentPath, String mask, boolean directory)
{
    String path = Environment.getExternalStorageDirectory().toString()+sentPath;
    Log.d("Files", "Path: " + path);
    File f = new File(path);
    File file[] = f.listFiles();
    Log.d("Files", "Size: "+ file.length);
    for (int i=0; i < file.length; i++)
    {
        Log.d("Files", "FileName:" + file[i].getName());
        GL2JNILib.AddFileToList(file[i].getName(), file[i].isDirectory());
    }
}
}

最佳答案

你应该替换

jmethodID mid = env->GetMethodID(clazz, "GetFiles", "(Ljava/lang/String;Ljava/lang/String;Z;)V");

jmethodID mid = env->GetMethodID(clazz, "GetFiles", "(Ljava/lang/String;Ljava/lang/String;Z)V"); 

因为最后一个参数是一个 boolean 值,它不是一个完全合格的类,而是一个基本类型签名,所以不需要 ;

关于java - 未找到 Android NDK 方法...从 C++ 调用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918373/

相关文章:

java - 正则表达式:简化 java 方法的参数(java.lang.String、xyz.Clazz -> String、Clazz)

在设备上进行 Android 调试 - LogCat 不起作用!

java - 密码验证正则表达式android

java - 获取主键和外键约束

java - 我如何调用父类(super class)的重写方法?

c++ - 没有名为 BST 的成员

c++ - 在 windows 下获取实际屏幕 dpi/ppi

C++ 未使用我自己的字符串复制函数按预期打印

java - 如何检查文件是否可读?

android - 克隆 firebase 项目时出错