JNI

 

  1.cpp掉java非static方法 無參數 無返回值  

 (1).頭文件引入

  1. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)  
  2. #include <jni.h>  
  3. #include "platform/android/jni/JniHelper.h"  
  4. #include <android/log.h>  
  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 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章