安卓JNI

apk包安装到安卓板子上运行
1.用手机数据线连接电脑和手机
2.手机选择使用“加载Sd卡”
3.将电脑中APK拖入Sd盘里
4.手机上取消加载Sd卡
5.取下手机数据线,在手机上“浏览Sd文件 ”或“文件管理器” 选Sd卡,找到你从电脑里拖入的APK,点击安装。


//java字符串转C字符串
char* jstringTostr(JNIEnv* env, jstring jstr)
{ 
char* pStr = NULL;

jclass jstrObj = (*env)->FindClass(env, "java/lang/String");
jstring encode = (*env)->NewStringUTF(env, "utf-8");
jmethodID methodId = (*env)->GetMethodID(env, jstrObj, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray byteArray = (jbyteArray)(*env)->CallObjectMethod(env, jstr, methodId, encode);
jsize strLen = (*env)->GetArrayLength(env, byteArray);
jbyte *jBuf = (*env)->GetByteArrayElements(env, byteArray, JNI_FALSE);

if (jBuf > 0)
{
pStr = (char*)malloc(strLen + 1);

if (!pStr)
{
return NULL;
}

memcpy(pStr, jBuf, strLen);

pStr[strLen] = 0;
}

(*env)->ReleaseByteArrayElements(env, byteArray, jBuf, 0);

return pStr;
}

//C字符串转java字符串
jstring strToJstring(JNIEnv* env, const char* pStr)
{
int strLen = strlen(pStr);
jclass jstrObj = (*env)->FindClass(env, "java/lang/String");
jmethodID methodId = (*env)->GetMethodID(env, jstrObj, "<init>", "([BLjava/lang/String;)V");
jbyteArray byteArray = (*env)->NewByteArray(env, strLen);
jstring encode = (*env)->NewStringUTF(env, "utf-8");

(*env)->SetByteArrayRegion(env, byteArray, 0, strLen, (jbyte*)pStr);

return (jstring)(*env)->NewObject(env, jstrObj, methodId, byteArray, encode);




2.如何将java传入的String参数转换为     java传入的String参数,char* test,然后  test = (char*)(*env)->GetStringUTFChars(env, jstring, NULL);     注意:test使用完后,必须手动释放内存 (*env)->ReleaseStringUTFChars(env, jstring, test); 3.将c中获取的一个char*的     这个char*如果是一般的字符串的话的buffer,最好作为bytearray能到’\0’就截断了。  有两种方式传递得到的数据 数据类型对应关系。  (libm ),压缩库(libz),Log库(liblog). 参数转换为c的char*,然后使用?  ,在c文件中被jni转换为jstring的数据类型,>GetStringUTFChars(env, jstring, NULL); 必须手动释放内存(通知虚拟机平台相关代码无需再访问>ReleaseStringUTFChars(env, jstring, test); 的buffer传递给java?  如果是一般的字符串的话,作为string传回去就可以了。如果是含有array传出,因为可以制定copy的length,如果copy有两种方式传递得到的数据:  ,在c文件中声明通知虚拟机平台相关代码无需再访问): 如果是含有’\0’copy到string,可能到\0就截断了,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值