亲测 放心观看

 

第一步:

先在qt 中新建新的库




android studio支持Kt_android


选择共享库


android studio支持Kt_android_02


选择需要的库的版本配置


android studio支持Kt_android_03


选择所需的qt模块


android studio支持Kt_Powered by 金山文档_04


接下来统一点下一步即可

第二步:

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


android studio支持Kt_qt_05


在.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是不需要加这个前缀就可以调用的)


android studio支持Kt_so文件_06


代码:

#include <jni.h>
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT jstring JNICALL Java_com_example_administrator_myapplication_nativeClass_stringFromJNI
#ifdef __cplusplus
}
#endif


android studio支持Kt_android_07


代码:

#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 的注册给大家对比参考


android studio支持Kt_android studio支持Kt_08


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


android studio支持Kt_so文件_09


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

第三步:

新建一个android studio项目

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

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


android studio支持Kt_qt_10


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


android studio支持Kt_android_11


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


android studio支持Kt_Powered by 金山文档_12


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

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

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


android studio支持Kt_so文件_13


代码如下:

apply plugin: 'com.android.application'
android {
 compileSdkVersion 26
"33.0.1"
 defaultConfig {
// 加载so类型
 multiDexEnabled true
 ndk {
"armeabi-v7a","armeabi", "x86", "mips"
 }
 }
// so库路径
 sourceSets {
 main {
'libs']
 }
 }
 defaultConfig {
"com.example.administrator.myapplication"
 minSdkVersion 26
 targetSdkVersion 23
 versionCode 1
"1.0"
 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 }
 buildTypes {
 release {
false
 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
 }
 }
}
dependencies {
include: ['*.jar'], dir: 'libs')
'com.android.support.test.espresso:espresso-core:2.2.2', {
group: 'com.android.support', module: 'support-annotations'
 })
'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就行了,如图下所示


android studio支持Kt_so文件_14


第四步

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


android studio支持Kt_android studio支持Kt_15


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


android studio支持Kt_so文件_16


MainActivity中实现调用该方法


android studio支持Kt_so文件_17


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