1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
tv.setText(Utils.v10("nb",33));
public static native String v10(String s, int b);
package com.justin.s10demo03; public class Foo {
//静态方法,让c来调用的 public static String getSign(){ return "justin"; } public static String getSign(int a, int b) { return "justin" + a + b; } public static String getSign(String s, int b) { return "justin" + s + b; } }
JNIEXPORT jstring
JNICALL Java_com_justin_s10demo03_Utils_v10(JNIEnv *env, jclass clazz, jstring s, jint b) { // 1 找到java的类 jclass cls = (*env)->FindClass(env, "com/justin/s10demo03/Foo"); //2 找到java类中的static方法,静态方法 // env:固定的 cls:哪个类,上面取出来的 getSign:找哪个静态方法 ()Ljava/lang/String; 参数和返回值签名,没有参数,括号是空的,有String类型返回值 // 找重载的方法,通过签名区分 jmethodID method1 = (*env)->GetStaticMethodID(env, cls, "getSign", "(Ljava/lang/String;I)Ljava/lang/String;"); // 3 执行静态方法 类 找到的静态方法 传参数进来 jstring res1 = (*env)->CallStaticObjectMethod(env, cls, method1,(*env)->NewStringUTF(env, "xxx"), b); // 把xxx转成jstring类型 // jstring res1 = (*env)->CallStaticObjectMethod(env, cls, method1,s, b); // s就是jstring不需要转了 // 4 返回给java char *res2 = (*env)->GetStringUTFChars(env, res1, 0); return (*env)->NewStringUTF(env, res2); }
|