亲测 放心观看
第一步:
先在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
#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
"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就行了,如图下所示
第四步
在对应的java包中即前面讲到的cpp对应的命名规则中对应的包中创建nativeClass类(其中我是在nativeClass类中载入so文件并声明对应的方法,在MainActivity中实现调用该方法)
nativeClass类中载入so文件并声明对应的方法(这里的报红是没有关系的)
MainActivity中实现调用该方法
运行就OK啦 感谢观看 有不同意见欢迎评论