写点什么

.so 将 c++ 转化为安卓可使用的数据

作者:用户10086
  • 2022 年 7 月 23 日
  • 本文字数:895 字

    阅读完需:约 3 分钟



jclass objClass = mJni->FindClass("结构类型"); 定义数组中元素类型


如果传入的是数组,需要知道它的大小并进行循环


int nsize = myArray.size();


创建一个数组对象,里面的每个元素用 objClass 元素表示(FindClass 所对应的类型)


数组为空 不再进行下面的操作



jobjectArray texts = mJni->NewObjectArray(nsize, objClass, NULL);
if (texts == nullptr) {
Log_Changer("<so::TryOperateCallBackToJava> undispose");
return;
}
复制代码



jmethodID method_set_taskId = mJni->GetMethodID(objClass, "setNextTaskId", "(Ljava/lang/String;)V");
jmethodID Event = mJni->GetMethodID(objClass, "<init>", "()V");
复制代码


Event 是用来获取构造方法


GetMethodID 是用来 获取 java 类中方法的 ID 最后一个参数是他的类型


String :"(Ljava/lang/String;)V"


Int :"(I)V"


Bool :"(Z)V"


如果这里获取的是一个数据结构 最后一个参数是他的结构类型 仿照 jclass 最后一个参数


jobject objmodel = mJni->NewObject(objClass, method_init_Event, "");


new 一个 object 存储它的内容 第一个参数为他的 jclass 第二个是他的构造函数


字符串的转化比较特别 一定要使用下面的格式 否则会出错的


 if (str != "") {
jstring jname = mJni->NewStringUTF(str.c_str());
mJni->CallVoidMethod(objmodel, method_set_taskId, jname); }
复制代码


CallVoidMethod 适用于将数据存储到 objmodel


大家都是一样的存储方法 但是第二第三个参数要对应


jclass cls;
jmethodID mid;cls = mJni->GetObjectClass(mThiz);
GetObjectClass(,"") 支持两个参数查询 他所检索的类 不知道类名 并且第二个参数是objectmid = mJni->GetMethodID(cls, "TryOperateAndroidBack", "([Lcn/jucheng/mise/model/java2so/event/operateTimerDelayEvent;Z)V");
复制代码


这句一定要记得写 第二个参数是安卓端的函数名 一档不能错 第三个参数为 这个函数的参数值 并且需要与下面的参数保持一致


mJni->CallVoidMethod(mThiz, mid, texts, bres);


前两个为固定参数 后面的是与上面的第三个参数的类型以及位置保持一致


这只是初学者的代码 有不对得地方恳请大家 多多指教!

发布于: 2 小时前阅读数: 9
用户头像

用户10086

关注

还未添加个人签名 2022.07.01 加入

一个辣椒爱好者

评论

发布
暂无评论
.so 将c++转化为安卓可使用的数据_qt_用户10086_InfoQ写作社区