JNI常用函数整理(不定时更新)

JNI中在C中打印logcat控制台日志(android_log_print.c)


#ifndef_ANDROID_LOG_PRINT_H_

#define_ANDROID_LOG_PRINT_H_

#include

#defineIS_DEBUG

#ifdefIS_DEBUG

#defineLOG_TAG("CUSTOMER_NDK_JNI")

#defineLOGI(...)((void)__android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__))

#defineLOGE(...)((void)__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__))

#else

#defineLOGI(LOG_TAG,...)NULL

#defineLOGE(LOG_TAG,...)NULL

#endif

#endif

把java的string转化成c的字符串

//把java的string转化成c的字符串

char* Jstring2CStr(JNIEnv* env, jstring jstr)

{

 char* rtn = NULL;

 jclass clsstring = (*env)->FindClass(env,"java/lang/String"); //String

 jstring strencode = (*env)->NewStringUTF(env,"GB2312"); //"gb2312"

 jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B"); //getBytes(Str);

 jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode); // String .getByte("GB2312");

 jsize alen = (*env)->GetArrayLength(env,barr);

 jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE);

 if(alen > 0)

 {

 rtn = (char*)malloc(alen+1); //"\0"

 memcpy(rtn,ba,alen);

 rtn[alen]=0;

 }

 (*env)->ReleaseByteArrayElements(env,barr,ba,0); //释放内存空间

 return rtn;

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,688评论 0 17
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,613评论 2 45
  • 人生只为欲字所累,便如马和牛,听人羁络;为鹰为犬,任物鞭挞。若果一念清明,淡然无欲,天地也不能转动我,鬼神也不能役...
    HedyWang1阅读 221评论 0 0