libQt5AndroidExtras.so not found

libQt5AndroidExtras.so not found

本文关键字:found not so libQt5AndroidExtras      更新时间:2023-10-16

我正在用Qt编写一个移动应用程序,需要进行一些特定于平台的调用,例如请求电池电量。因此,从Qt级别开始,我正在尝试调用Android SDK级别。从我在互联网上收集到的信息来看,应该可以做到以下几点。

我用要调用的代码创建了一个小的 Java 类:

// AndroidService.java
package path.to.java;
public class AndroidService {
    public static int doSomething() {
        System.out.println("Android says hi");
        return 1;
    }
}

接下来,在我的 Cpp 代码中,我使用 Qt 的 Android JNI 库调用它:

// androidservice.cpp
#include <QtAndroidExtras>
void doSomething() {
    QAndroidJniObject::callStaticMethod<int>("path.to.java.AndroidService", "doSomething");
}

我在主函数中调用它。

最后,我将以下内容添加到我的 .pro 文件中:

// project.pro
android {
    QT += androidextras
    SOURCES += mobileservice/androidservice.cpp
    OTHER_FILES += mobileservice/android/src/path/to/java/AndroidService.java
    ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/mobileservice/android
}

编译后,这将构建没有错误。但是,在运行应用程序时,我遇到以下堆栈跟踪的崩溃:

E/AndroidRuntime( 7184): java.lang.UnsatisfiedLinkError: dlopen failed: library "libQt5AndroidExtras.so" not found
E/AndroidRuntime( 7184):    at java.lang.Runtime.loadLibrary(Runtime.java:371)
E/AndroidRuntime( 7184):    at java.lang.System.loadLibrary(System.java:988)
E/AndroidRuntime( 7184):    at org.qtproject.qt5.android.bindings.QtActivity.loadApplication(QtActivity.java:252)
E/AndroidRuntime( 7184):    at org.qtproject.qt5.android.bindings.QtActivity.startApp(QtActivity.java:655)
E/AndroidRuntime( 7184):    at org.qtproject.qt5.android.bindings.QtActivity.onCreate(QtActivity.java:895)
E/AndroidRuntime( 7184):    at android.app.Activity.performCreate(Activity.java:6500)
E/AndroidRuntime( 7184):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
E/AndroidRuntime( 7184):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
E/AndroidRuntime( 7184):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
E/AndroidRuntime( 7184):    at android.app.ActivityThread.access$1000(ActivityThread.java:198)
E/AndroidRuntime( 7184):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
E/AndroidRuntime( 7184):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 7184):    at android.os.Looper.loop(Looper.java:145)
E/AndroidRuntime( 7184):    at android.app.ActivityThread.main(ActivityThread.java:6837)
E/AndroidRuntime( 7184):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 7184):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 7184):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
E/AndroidRuntime( 7184):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

尽管将androidextras库添加到我的.pro文件中,但该应用程序似乎无法找到它。我错过了什么吗?

好的,我想我找到了。我没有提到的是,我的项目由子项目组成:首先构建 project.pro,然后由 app.protest.pro 包含。在这种情况下,显然声明

QT += androidextras

必须写入所有适用的 .pro 文件中。否则,qmake 不会考虑它,并且在编译过程中不会包含库。

感谢大家的投入。

您确定运行应用程序时libQt5AndroidExtras.so在场吗?如果您使用的是Qt Creator,您可以查看将应用程序部署到Android设备Qt文档。例如,您需要选择将本地Qt库部署到临时目录选项以在调试时部署Qt库,或者在创建APK时在APK中捆绑Qt库

您也可以添加到您的专业文件中(androiddeployqt 应该检测依赖项):

ANDROID_DEPLOYMENT_DEPENDENCIES = <path>/libQt5AndroidExtras.so