[调试]NDK方式编写C++

JNIEXPORT jint JNICALL Java_com_example_duanjiwei_ndkdemoapp_MainActivity_initProc(JNIEnv *env, jclass obj, jstring jstr){
    jclass cls = env->GetObjectClass(obj);  // 得到代表Java类的jclass
    jfieldID fid1 = env->GetStaticFieldID(cls, "cstr", "Ljava/lang/String");//得到Java端保存分类器路径String静态变量的jfiledID
    jstring jst1 = (jstring)env->GetStaticObjectField(cls, fid1); //得到Java端的String实例jstring
    const char* cstring = env->GetStringUTFChars(jstr, NULL); //得到利用UTF-8编码的C++字符串,此字符串串为存储分类器的路径
    env->ReleaseStringUTFChars(jstr, cstring);  //释放拷贝的内存

    bool bIsLoad = face_cascade.load( cstring );
    if( bIsLoad == false ){
        return -1;
    }
    return 0;
}

jclass clsstring = env->FindClass("java/lang/String");  //获取java.lang.String的类型
    jstring strencode = env->NewStringUTF("utf-8"); //转码
    //获取clssting(byte[],String) 的构造器,将本地byte[]数组转换成一个新String
    jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
    jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);  //建立barr数组
    jsize alen = env->GetArrayLength(barr);  //获取数组barr的长度
    jbyte* ba = env->GetByteArrayElement(barr, JNI_FALSE);  //将jbyteArray转换成jbyte*
    char* rtn;
    if(alen>0){
        rtn = (char*)malloc(alen + 1);
        memcpy(rtn, ba, alen);
        rtn[alen] = 0;
    }
    env->ReleaseByteArrayElement(barr, ba, 0);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值