buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } repositories { google() jcenter() } apply plugin: 'com.android.application' dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) } android { /******************************************************* * The following variables: * - androidBuildToolsVersion, * - androidCompileSdkVersion * - qt5AndroidDir - holds the path to qt android files * needed to build any Qt application * on Android. * * are defined in gradle.properties file. This file is * updated by QtCreator and androiddeployqt tools. * Changing them manually might break the compilation! *******************************************************/ compileSdkVersion androidCompileSdkVersion.toInteger() buildToolsVersion '28.0.3' 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'] } } // kinda of cheaty, would prefer to use if (System.getEnv("GOARCH") == "arm64") { // but it doesn't want to work in this context if (qt5AndroidDir.contains("arm64")) { splits { // Configures multiple APKs based on ABI. abi { // Enables building multiple APKs per ABI. enable true // By default all ABIs are included, so use reset() and include to specify that we only // want APKs for x86 and x86_64. // Resets the list of ABIs that Gradle should create APKs for to none. reset() // Specifies a list of ABIs that Gradle should create APKs for. // Note that because of the way that therecipe/qt bundles libraries // only the specific architecture specified by GOARCH /GOARM will *actually* // work so we currently have to do separate builds for each arch - this needs to be fixed. include "arm64-v8a" // Specifies that we do not want to also generate a universal APK that includes all ABIs. // QT deploy has to be run twice to generate the libgo_base.so for each arch universalApk false } } task linkBuildDebugArm64(type: Exec) { workingDir '../build/build/outputs/apk/debug/' commandLine 'ln', '-sf', 'build-arm64-v8a-debug.apk', 'build-debug.apk' } task renameBuildReleaseArm64(type: Exec) { workingDir '../build/build/outputs/apk/release/' commandLine 'mv', 'build-arm64-v8a-release-unsigned.apk', 'build-release-unsigned.apk' } afterEvaluate { assembleDebug.finalizedBy(linkBuildDebugArm64) assembleRelease.finalizedBy(renameBuildReleaseArm64) } } else { splits { // Configures multiple APKs based on ABI. abi { // Enables building multiple APKs per ABI. enable true // By default all ABIs are included, so use reset() and include to specify that we only // want APKs for x86 and x86_64. // Resets the list of ABIs that Gradle should create APKs for to none. reset() // Specifies a list of ABIs that Gradle should create APKs for. // Note that because of the way that therecipe/qt bundles libraries // only the specific architecture specified by GOARCH /GOARM will *actually* // work so we currently have to do separate builds for each arch - this needs to be fixed. include "armeabi-v7a" // Specifies that we do not want to also generate a universal APK that includes all ABIs. // QT deploy has to be run twice to generate the libgo_base.so for each arch universalApk false } } task linkBuildDebugArm7(type: Exec) { workingDir '../build/build/outputs/apk/debug/' commandLine 'ln', '-sf', 'build-armeabi-v7a-debug.apk', 'build-debug.apk' } task renameBuildReleaseArm7(type: Exec) { workingDir '../build/build/outputs/apk/release/' commandLine 'mv', 'build-armeabi-v7a-release-unsigned.apk', 'build-release-unsigned.apk' } afterEvaluate { assembleDebug.finalizedBy(linkBuildDebugArm7) assembleRelease.finalizedBy(renameBuildReleaseArm7) } } lintOptions { abortOnError true } }