008android初級篇之jni中數組的傳遞

008android初級篇之jni中數組的傳遞java

jni中在native中數據類型的實際類型

  1. jchar 佔兩個字節,跟native c中的char(佔一個字節)是兩個數據類型
  2. jbyte, unsigned char,jboolean 這三個類型相一致的,佔一個字節。
  3. java傳入數組,jni提供了一系列函數GetXXArrayElements來得到

下面舉一個例子android

一個jByteArray數組,如何在java和c/c++之間傳遞,

從java層傳遞一個byte[]到native

java實現函數c++

public native boolean changeAccountPasswd(byte[] passwd,int len);

Native 層的實現數組

JNIEXPORT jboolean  JNICALL Java_com_frank_smart_smarthome_JniSocket_changeAccountPasswd
        (JNIEnv *env, jobject object,jbyteArray passwd,jint len)
{
   jbyte *bytes;
   unsigned char *buf;
   int i;

    //從jbytearray獲取數據到jbyte*
   bytes = env->GetByteArrayElements(passwd,NULL);
   if(bytes == NULL) {
      return false;
   }
   buf =(unsigned char *)calloc(len,sizeof(char));
   if(buf == NULL)
   {
      return false;
   }
   for(i=0;i<len;i++)
   {
      *(buf+i)=(unsigned char)(*(bytes+i));
   }
    //釋放資源
   env->ReleaseByteArrayElements(passwd,bytes,0);
   __android_log_write(ANDROID_LOG_ERROR,"TAG",(char*)buf);
   free(buf);
   return true;
}

從Native傳遞一個對象數組給Java

可參考以下連接中代碼,未驗證函數

JNI:從C/C++(本地代碼)中返回一個對象數組.net

相關文章
相關標籤/搜索