1.  QT 5.9.0

     工具 -> 选项

     注意:  QT 5.9.0 支持 NDK r10e.   更新 的 NDK 不支持。

 

2.  提供 JAVA 的 JNI 接口

   QT 和 NDK 不同,  默认 so 没有 JNI_OnLoad, 需要提供。

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){   return JNI_VERSION_1_4;}JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved){}

3. 发布时  不仅需要  QT系统 的 库 ( libQt5Widgets.so ) , 还有 NDK的库 (libgnustl_shared.so)。 

 

4.  JNI中  生成 JAVA类 的标准过程

 

static jobject makeJniResult( JNIEnv *env, int retPointNum, float updateX, float updateY, float updateWidth, float updateHeight,                              float * pData){    jclass jclassResultInfo = env->FindClass("com/hhtpc/hhstrokesadr/JSketchResult"); // 获取类 引用    jmethodID jidResultInfo =        env->GetMethodID(jclassResultInfo, "", "(I[F[F)V"); // 获取类的方法,此方法是构造函数                                        // "(ILjava/lang/String;[B)V" 解释一下这个字符串,V代表返回空类型, ()号里面代表三个参数, 分解成三个分别是(我用空格隔开)   I   Ljava/lang/String;  [B   分别代表整数,字符string,和byte[] 自己体会    float  rect[] ={updateX,updateY,updateWidth,updateHeight};    jfloatArray jniRect= env->NewFloatArray(4);    env->SetFloatArrayRegion(jniRect, 0, 4, (const jfloat*)rect);    jfloatArray jniPoints = env->NewFloatArray( 2 * retPointNum );    env->SetFloatArrayRegion(jniPoints, 0, 2*retPointNum, (const jfloat*)pData );    jobject result = env->NewObject(jclassResultInfo, jidResultInfo, retPointNum,jniRect,jniPoints ); // 返回值不需要要释放    env->DeleteLocalRef(jniRect);  // 中间变量需要释放    env->DeleteLocalRef(jniPoints); // 中间变量需要释放    return result;}

 

更多相关文章

  1. Android6.0系统悬浮窗权限的问题解决方法
  2. Retrofit +OKHttp简单封装使用
  3. android退出系统的绝杀方法
  4. Android(安卓)EditText修改显示方式
  5. Android(安卓)JNI实例代码(一)
  6. Android中级篇之区分系统程序和安装程序
  7. android Service理解
  8. Android(安卓)Bitmap内存限制
  9. android AIDL简单步骤

随机推荐

  1. pdo操作
  2. 碰见提示格式化怎么解决?
  3. 桌面文件误删怎么找回
  4. 矩阵的乘法运算与css的3d变换(transform)
  5. PHP数据库操作:PDO基本操作
  6. 【Redis】PHP操作Redis的命令大全
  7. 解决Laravel5.5版本框架缺少vender目录报
  8. 闪存插入时显示提示格式化请问咋才能修复
  9. 误删的文件怎样找到
  10. 对查询的结果集添加自增序号