diff --git a/android/build.gradle b/android/build.gradle index 8e7f728f98..015f80967b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -163,7 +163,6 @@ def scanQmlImports = { File qmlRootPath -> " -importPath ${qmlRoot.absolutePath}/qml" def commandResult = captureOutput(command) - println commandResult new JsonSlurper().parseText(commandResult).each { if (!it.containsKey('path')) { println "Warning: QML import could not be resolved in any of the import paths: ${it.name}" @@ -245,6 +244,58 @@ def parseQtDependencies = { List qtLibs -> }) } +def generateLibsXml = { + def libDestinationDirectory = jniFolder + def jarDestinationDirectory = new File(appDir, 'libs') + def assetDestinationDirectory = new File(appDir, 'src/main/assets/bundled'); + def libsXmlFile = new File(appDir, 'src/main/res/values/libs.xml') + def libPrefix = 'lib' + File.separator + def jarPrefix = 'jar' + File.separator + + def xmlParser = new XmlParser() + def libsXmlRoot = xmlParser.parseText('') + def qtLibsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'qt_libs']) + def bundledLibsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'bundled_in_lib']) + def bundledAssetsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'bundled_in_assets']) + + options.files.each { + def sourceFile = it + if (!sourceFile.exists()) { + throw new GradleException("Unable to find dependency file " + sourceFile.toString()) + } + + def relativePath = relativize( qmlRoot, sourceFile ).toString() + def destinationFile + if (relativePath.endsWith('.so')) { + def garbledFileName + if (relativePath.startsWith(libPrefix)) { + garbledFileName = relativePath.substring(libPrefix.size()) + Pattern p = ~/lib(Qt5.*).so/ + Matcher m = p.matcher(garbledFileName) + assert m.matches() + def libName = m.group(1) + xmlParser.createNode(qtLibsNode, 'item', [:]).setValue(libName) + } else { + garbledFileName = 'lib' + relativePath.replace(File.separator, '_'[0]) + xmlParser.createNode(bundledLibsNode, 'item', [:]).setValue("${garbledFileName}:${relativePath}".replace(File.separator, '/')) + } + destinationFile = new File(libDestinationDirectory, garbledFileName) + } else if (relativePath.startsWith('jar')) { + destinationFile = new File(jarDestinationDirectory, relativePath.substring(jarPrefix.size())) + } else { + xmlParser.createNode(bundledAssetsNode, 'item', [:]).setValue("bundled/${relativePath}:${relativePath}".replace(File.separator, '/')) + destinationFile = new File(assetDestinationDirectory, relativePath) + } + + copy { from sourceFile; into destinationFile.parent; rename(sourceFile.name, destinationFile.name) } + assert destinationFile.exists() && destinationFile.isFile() + } + def xml = XmlUtil.serialize(libsXmlRoot) + new FileWriter(libsXmlFile).withPrintWriter { writer -> + writer.write(xml) + } +} + task downloadDependencies { doLast { packages.each { entry -> @@ -298,7 +349,7 @@ task extractDependencies(dependsOn: verifyDependencyDownloads) { } // Copies the non Qt dependencies. Qt dependencies (primary libraries and plugins) are handled by the qtBundle task -task copyDependenciesImpl { +task copyDependencies(dependsOn: [ extractDependencies ]) { doLast { packages.each { entry -> def packageName = entry.key @@ -320,8 +371,6 @@ task copyDependenciesImpl { } } -task copyDependencies(dependsOn: [ extractDependencies, copyDependenciesImpl ]) { } - task downloadScribe(type: Download) { src baseUrl + scribeFile dest new File(baseFolder, scribeLocalFile) @@ -376,59 +425,11 @@ task extractGvrBinaries(dependsOn: extractDependencies) { task qtBundle { doLast { parseQtDependencies(QT5_DEPS) - //scanQmlImports(new File("${appDir}/../../interface/resources/qml/")) - scanQmlImports(new File("${projectDir}/app/src/main/cpp")) - - def libDestinationDirectory = jniFolder - def jarDestinationDirectory = new File(appDir, 'libs') - def assetDestinationDirectory = new File(appDir, 'src/main/assets/bundled'); - def libsXmlFile = new File(appDir, 'src/main/res/values/libs.xml') - def libPrefix = 'lib' + File.separator - def jarPrefix = 'jar' + File.separator - - def xmlParser = new XmlParser() - def libsXmlRoot = xmlParser.parseText('') - def qtLibsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'qt_libs']) - def bundledLibsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'bundled_in_lib']) - def bundledAssetsNode = xmlParser.createNode(libsXmlRoot, 'array', [name: 'bundled_in_assets']) - - options.files.each { - def sourceFile = it - if (!sourceFile.exists()) { - throw new GradleException("Unable to find dependency file " + sourceFile.toString()) - } - - def relativePath = relativize( qmlRoot, sourceFile ).toString() - def destinationFile - if (relativePath.endsWith('.so')) { - def garbledFileName - if (relativePath.startsWith(libPrefix)) { - garbledFileName = relativePath.substring(libPrefix.size()) - Pattern p = ~/lib(Qt5.*).so/ - Matcher m = p.matcher(garbledFileName) - assert m.matches() - def libName = m.group(1) - xmlParser.createNode(qtLibsNode, 'item', [:]).setValue(libName) - } else { - garbledFileName = 'lib' + relativePath.replace(File.separator, '_'[0]) - xmlParser.createNode(bundledLibsNode, 'item', [:]).setValue("${garbledFileName}:${relativePath}".replace(File.separator, '/')) - } - destinationFile = new File(libDestinationDirectory, garbledFileName) - } else if (relativePath.startsWith('jar')) { - destinationFile = new File(jarDestinationDirectory, relativePath.substring(jarPrefix.size())) - } else { - xmlParser.createNode(bundledAssetsNode, 'item', [:]).setValue("bundled/${relativePath}:${relativePath}".replace(File.separator, '/')) - destinationFile = new File(assetDestinationDirectory, relativePath) - } - - copy { from sourceFile; into destinationFile.parent; rename(sourceFile.name, destinationFile.name) } - assert destinationFile.exists() && destinationFile.isFile() - } - def xml = XmlUtil.serialize(libsXmlRoot) - new FileWriter(libsXmlFile).withPrintWriter { writer -> - writer.write(xml) - } - } + //def qmlImportFolder = new File("${appDir}/../../interface/resources/qml/") + def qmlImportFolder = new File("${projectDir}/app/src/main/cpp") + scanQmlImports(qmlImportFolder) + generateLibsXml() + } } task setupDependencies(dependsOn: [setupScribe, copyDependencies, extractGvrBinaries, qtBundle]) { }