552
社区成员
发帖
与我相关
我的任务
分享
JNIEnv* env;
jclass cls;//对用java的Class
jobject obj;
jmethodID mid;//映射方法
//构建一个Class
cls = jniEnv->FindClass("com/ndk/testndk/TestHello");//写上类的路径
//实例化对象
//方法一
obj = env->AllocObject(cls);
//方法二
jmethodID obj_id = env->GetMethodID(cls,"<init>", "()V");
TestProvider mTestProvider = env->NewObject(cls,obj_id);
//映射方法
//其中"()Ljava/lang/String;",括号是参数,Ljava/lang/String;是返回值,如有参数string,即为"(Ljava/lang/String;)Ljava/lang/String;"
//静态
mid = env->GetStaticMethodID(cls, "getStaticString","()Ljava/lang/String;");
//非静态
mid = env->GetMethodID(cls, "getString","()Ljava/lang/String;");
//调用方法
//静态:
env->CallStaticObjectMethod(cls, mid);
//非静态:
env->CallVoidMethod(obj, mid,jstr);
</init>
//-----------------开始写代码-----------------------------------------------------------------------------
[java] view plaincopy在CODE上查看代码片派生到我的代码片
//java部分
public class TestHello2 {
public static String getStaticString(){
return "Java静态的返回值";
}
public String getString(String str){
str += ",还有非静态的。";
Log.e("", str);
return str;
}
}
//C++部分
jstring Java_com_ndk_testndk_TestHello_jnistr(JNIEnv* env,jobject obj){
jclass cls = env->FindClass("com/ndk/testndk/TestHello2");
jobject obj1 = env->AllocObject(cls);
jmethodID mid1 = env->GetStaticMethodID(cls, "getStaticString","()Ljava/lang/String;");
jmethodID mid2 = env->GetMethodID(cls, "getString","(Ljava/lang/String;)Ljava/lang/String;");
//静态:
jstring jstr = (jstring) env->CallStaticObjectMethod(cls, mid1);
//非静态:
jstring jstr2 = (jstring) env->CallObjectMethod(obj1, mid2,jstr);
return jstr2;
}