Search code examples
androidqtgradleqmake

androiddeployqt: Qt hook gradle android


I want to use third-party libraries in my Qt/Android project. In typical android project I have to add compile to dependencies list, however it's impossible for Qt, because build.gradle is generated by androiddeployqt.

Docs says I should use project.properties for this, but it doesn't make any sense, because its support has been dropped since Android Studio. Moreover, I don't want to recompile all libraries on my own when using gradle.

So the question is: is it possible to hook androiddeployqt somehow to add few lines into build.gradle? Or maybe it's possible to put another build.gradle into subdir and gradle will execute tasks from it?


Solution

  • The solution is put build.gradle neat AndroidManifest.xml file with content like

    buildscript {
        repositories {
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:2.2.3'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
        }
    }
    
    apply plugin: 'com.android.application'
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
    
        compile 'com.android.support:appcompat-v7:22.1.1'
        compile 'io.grpc:grpc-protobuf-lite:1.5.0'
        compile 'io.grpc:grpc-stub:1.5.0'
        compile 'javax.annotation:javax.annotation-api:1.2'
        compile 'io.grpc:grpc-okhttp:1.5.0'
        compile 'com.google.protobuf:protobuf-java:3.4.0'
        compile 'io.grpc:grpc-protobuf:1.5.0'
    }
    
    android {
        compileSdkVersion androidCompileSdkVersion.toInteger()
    
        buildToolsVersion androidBuildToolsVersion
    
        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']
           }
        }
    
        lintOptions {
            abortOnError false
        }
    }