QT 环境的 Android(安卓)配置和编译
16lz
2021-01-25
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;}
更多相关文章
- Android6.0系统悬浮窗权限的问题解决方法
- Retrofit +OKHttp简单封装使用
- android退出系统的绝杀方法
- Android(安卓)EditText修改显示方式
- Android(安卓)JNI实例代码(一)
- Android中级篇之区分系统程序和安装程序
- android Service理解
- Android(安卓)Bitmap内存限制
- android AIDL简单步骤