In preparation for google play 64 bit requirement I updated my project to include arm64-v8a libs. So now I have both armeabi-v7a and arm64-v8a folders inside Android/jni/ folder.
I use Clang Qt 5.12.4 for Android ARMv7 and Clang Qt 5.12.4 for Android ARM64-v8a kits for it’s respective builds.
The issue now is that only the 64 bit version works. Even when I use armeabi-v7a for building, it ends up with the following errors trying to look for arm64:
W System : ClassLoader referenced unknown path: I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libc++_shared.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Core.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5AndroidExtras.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Gui.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Network.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Multimedia.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Qml.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5Quick.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5QuickTemplates2.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5QuickControls2.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5WebSockets.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5MultimediaQuick.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5QuickParticles.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5MultimediaQuick.so’ I Qt JAVA : Can’t find ‘/data/app/com.myproject.test-VAF1p6T7dJCG1T41Wzsu-g==/lib/arm64/libQt5RemoteObjects.so’ E AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread E AndroidRuntime: Process: com.myproject.test, PID: 1406 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: file offset for the library “/data/data/com.myproject.test/qt-reserved-files/plugins/platforms/android/libqtforandroid.so” >= file size: 0 >= 0 E AndroidRuntime: at java.lang.Runtime.load0(Runtime.java:928) E AndroidRuntime: at java.lang.System.load(System.java:1633) E AndroidRuntime: at org.qtproject.qt5.android.QtNative$2.run(QtNative.java:183) E AndroidRuntime: at org.qtproject.qt5.android.QtThread$2.run(QtThread.java:87) E AndroidRuntime: at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61) E AndroidRuntime: at java.lang.Thread.run(Thread.java:764) E MQSEventManagerDelegate: failed to get MQSService.
All android files are handled by gradle, now I’m not well-versed with gradle, but I assume it should handle which abi to use based on the kit used to build?
If I remove arm64-v8a from the filter the 32-bit app will work, but then the 64-bit one doesn’t. build.gradle:
android { … defaultConfig { minSdkVersion 19 ndk { abiFilters “armeabi-v7a”, “arm64-v8a” } } sourceSets { main { manifest.srcFile ‘AndroidManifest.xml’ java.srcDirs = [qt5AndroidDir + ‘/src’, ‘src’, ‘java’] aidl.srcDirs = [qt5AndroidDir + ‘/src’, ‘src’, ‘aidl’] res.srcDirs = [qt5AndroidDir + ‘/res’, ‘res’] resources.srcDirs = [‘src’] renderscript.srcDirs = [‘src’] assets.srcDirs = [‘assets’] jniLibs.srcDirs = [‘libs’, ‘jni’] } } … }
Has anyone encountered a similar issue or has any idea how to make it build only the libs for the kit I’m using? I don’t really understand why it’s looking for 64-bit libs when building with Clang Qt 5.12.4 for Android ARMv7.
SDK Version: 26.1.1 NDK Version: 19.2.5345600 JDK version: jdk1.8.0_212
