1.cpp掉java非static方法 无参数 无返回值  

 (1).头文件引入

  1. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)  
  2. #include   
  3. #include "platform/android/jni/JniHelper.h"  
  4. #include   
  5. #endif   

 

(2).按钮事件代码

调用非静态方法的关键代码 

CallStaticVoidMethod

getMethodInfo 

  1. void HelloWorld::menuCloseCallback(CCObject* pSender) {  
  2.     JniMethodInfo minfo;  
  3.     bool isHave = JniHelper::getMethodInfo(minfo,  
  4.             "org/test/ActivityTest""playVedio""()V");  
  5.     if (isHave) {  
  6.         minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);  
  7.     }  
  8. }

 

(3).java非static方法

  1. void playVedio()  
  2.     {  
  3.           
  4.         System.out.println(" playVedio  playVedio  playVedio  ");  
  5.           
  6.     }  

 

2. cpp调用java static方法

cpp 

getStaticMethodInfo

CallStaticVoidMethod

CallStaticIntMethod

 

 

CallStaticObjectMethod

 

string(string) 

   
   
   
   
  1. void HelloWorld::menuCloseCallback(CCObject* pSender) { 
  2.     bool isHave; 
  3.     const char* msgRet; 
  4.     JniMethodInfo minfo; 
  5.     const char* fileName = "testWei"
  6.  
  7.     isHave = JniHelper::getStaticMethodInfo(minfo, "org/test/MoneyStatic"
  8.             "sendWeibo""(Ljava/lang/String;)Ljava/lang/String;"); //string参数返回string
  1.     if (isHave) { 
  2.         jstring jTitle = minfo.env->NewStringUTF(fileName); 
  3.         jobject obj = minfo.env->CallStaticObjectMethod(minfo.classID, 
  4.                 minfo.methodID, jTitle); 
  5.         jstring jRet = (jstring) obj; 
  6.         msgRet = (minfo.env)->GetStringUTFChars(jRet, NULL); 
  7.     } 

 

int(int)

bool isHave = JniHelper::getStaticMethodInfo(minfo, "org/test/MoneyStatic" "buyNumber""(I)I");

jint  _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID 333);

void(void)

bool isHave = JniHelper::getStaticMethodInfo(minfo, "org/test/MoneyStatic" "judgeUsers", "()V");

minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); 

java

   
   
   
   
  1. //string(string)
  2. public static String sendWeibo(String pCon) { 
  3.  
  4.         System.out.println("sendWeibo  :  " + pCon); 
  5.         Message msg = mHandler.obtainMessage(); 
  6.         msg.what = Demo.SHOW_DIALOG; 
  7.         msg.sendToTarget(); 
  8.  
  9.         return ""
  10.  
  11.     } 

    //int(int)

  12. public static int buyNumber(int _int) {

    System.out.println("buyNumber  :  " + _int);
  13.  return _int+1000;

  14. }

 

3.java调用cpp

原理:通过native调用cpp的可以返回参数

java

 public static native void cardJudge(int pJudge); //其他方法调用此方法 类名.方法名

 public static native void displayProgress(String numString); //

cpp 

 

//pJudge上面传过来的参数

//org_test包名、MoneyStatic类名、cardJudge方法名

 

返回参数int

extern "C" {

void Java_org_test_MoneyStatic_cardJudge(JNIEnv *env, jobject thiz,  jint pJudge){

if (pJudge == 1) {

} else { }

}

}

返回参数string 

extern "C" {

void Java_org_mm_MyStatic_displayProgress(JNIEnv *env, jobject thiz, jstring text) {

const char* pszText = env->GetStringUTFChars(text, NULL);

}

}

 

 4.转换

http://blog.csdn.net/lizhiguo0532/article/details/7219357

 (1) jstring-->const char*  

const char* pszText = env->GetStringUTFChars(text, NULL);

(2)const char*--> jstring  

 

jstring str = env->newStringUTF("HelloJNI");

 

(3)jint --- int