android studio 使用QT so库的全过程

亲测 放心观看

主要参考以下连接

(15条消息) qt android生成so,Android Studio调用QT for Android生成的.so库_weixin_39903477的博客-CSDN博客

(15条消息) Android Studio4使用Qt库生成so库_超奇电子的博客-CSDN博客_qtcore: initjni failed

第一步:

先在qt 中新建新的库

选择共享库

选择需要的库的版本配置

选择所需的qt模块

接下来统一点下一步即可

第二步:

新建完成后的文件夹大致结构就是这样

在.pro中加入下面代码,因此来提供对Android库的支持

QT += androidextras

下面附上.h.cpp文件结构 其中使用静态注册方法注册给java(在函数名字的定义在我个人理解是静态注册,但要多加一个Java来开头 如函数名Java_com_example_administrator_myapplication_nativeClass_stringFromJNI

其中com_example_administrator_myapplication代表在java中的哪一个包下的类给cpp注册声明的包名(com.example.administrator.myapplication)

,其中 nativeClass_stringFromJNI 的nativeClass_stringFromJ是给cpp注册声明的类 stringFromJNI是cpp对应的方法名称在nativeClass类中声明,Java是多加的 在qt中的java是不需要加这个前缀就可以调用的)

代码:

#include <jni.h>

#ifdef __cplusplus

extern "C"

{

#endif

JNIEXPORT jstring JNICALL Java_com_example_administrator_myapplication_nativeClass_stringFromJNI (JNIEnv* env);

#ifdef __cplusplus

}

#endif

代码:

#include <string>

extern "C" JNIEXPORT jstring JNICALL Java_com_example_administrator_myapplication_nativeClass_stringFromJNI(JNIEnv *env)

{

std::string hello = "HHHHH";

return env->NewStringUTF(hello.c_str());

}

附上android studio 的注册给大家对比参考

接下来编译项目即可不用运行就可产生你需要的库文件

它会生成连接文件我的是so文件 前面会多加lib前缀是这样的风格别问 在android studio中使用System.loadLibrary载入库时不要添加这个前缀 因为它会自动匹配 前缀lib和后缀.os

第三步:

新建一个android studio项目

在项目文件里的app目录下的libs文件夹内部创建对应版本的文件夹如下

我使用的是armeabi-v7a版本 一定要对应自己编译的qt版本

除了拷贝qt当时编译的文件(只要so文件就可以了 图中有多余) 还要三个文件libQt5Core.so libgnustl_shared.so QtAndroid.jar如下

1 libQt5Core.so文件,这个你可以在电脑中查找,会发现它在QT安装目录下,要找对应的版本如下

2 libgnustl_shared.so文件,这个文件实在ndk安装目录里边,我的是在E:.\.. ...\libs\armeabi-v7a内,记住,一定要拷对应CPU型号的文件.

3 将QtAndroid.jar添加到项目so所在的文件夹中,QtAndroid.jar在qt里面自己找但要对应版本

随后就是配置项目里的build.gradle文件 如下

代码如下:

apply plugin: 'com.android.application'

android {

compileSdkVersion 26

buildToolsVersion "33.0.1"

defaultConfig {

// 加载so类型

multiDexEnabled true

ndk {

abiFilters "armeabi-v7a","armeabi", "x86", "mips"

}

}

// so库路径

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

defaultConfig {

applicationId "com.example.administrator.myapplication"

minSdkVersion 26

targetSdkVersion 23

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

dependencies {

compile fileTree(include: ['*.jar'], dir: 'libs')

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

exclude group: 'com.android.support', module: 'support-annotations'

})

compile 'com.android.support:appcompat-v7:26.+'

compile 'com.android.support.constraint:constraint-layout:1.0.2'

compile 'com.android.support:design:26.+'

testCompile 'junit:junit:4.12'

compile files('libs/armeabi-v7a/QtAndroid.jar')

}

编译项目后(不行就运行一下,只要出来就行)在android studio内项目中选中QtAndroid.jar文件右键选择Add As Library…然后点击OK就行了,如图下所示

第四步

在对应的java包中即前面讲到的cpp对应的命名规则中对应的包中创建nativeClass类(其中我是在nativeClass类中载入so文件并声明对应的方法,在MainActivity中实现调用该方法)

nativeClass类中载入so文件并声明对应的方法(这里的报红是没有关系的)

MainActivity中实现调用该方法

运行就OK啦 感谢观看 有不同意见欢迎评论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值