文件目录:Engine\Source\Runtime\Launch\Private\Android\AndroidJNI.cpp
jmethodID FJavaWrapper::FindMethod(JNIEnv* Env, jclass Class, const ANSICHAR* MethodName, const ANSICHAR* MethodSignature, bool bIsOptional)
{
jmethodID Method = Class == NULL ? NULL : Env->GetMethodID(Class, MethodName, MethodSignature);
CHECK_JNI_RESULT(Method);
return Method;
}
调用示例
void JarTestWrapper::FindClassesAndMethods(JNIEnv* Env)
{
bool bIsOptional = false;
JarTestWrapper::CallJarFunc = FJavaWrapper::FindMethod(Env, FJavaWrapper::GameActivityClassID, "CallTest", "()V", bIsOptional);
}
需要修改的主要是MethodName和MethodSignature
MethodName就是要调用的函数名称,即APL中缩写的接口
MethodSignature为JAVA的函数签名:参考链接:https://blog.csdn.net/li_xiao_dai/article/details/17420911
对应到UE4中
JAVA函数 | JAVA函数签名 | UE4参数填写 |
---|---|---|
public void test1(){} | test1()V | ()V |
public void test2(String str) | test2(Ljava/lang/String;)V | (Ljava/lang/String;)V |
public void test1(){} | test3()I | ()I |
我这里复制部分过来方便查阅
特殊字符 | 数据类型 | 特殊说明 |
---|---|---|
V | void | 一般用于表示方法的返回值 |
Z | boolean | |
B | byte | |
C | char | |
S | short | |
I | int | |
J | long | |
F | float | |
D | double | |
[ | 数组 | 以[开头,配合其他的特殊字符,表示对应数据类型的数组,几个[表示几维数组 |
L全类名; | 引用类型 | 以L开头、;结尾,中间是引用类型的全类名 |