diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-08-02 16:22:30 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-08-09 17:30:46 +0000 |
commit | 22ac36861826472f6a572bb9af6c2181d5c63438 (patch) | |
tree | 679f2402ca11a08f5046a67d55d29de65068485e /share | |
parent | 1d4a716af28d167cc151f30f8f621727579b70fc (diff) |
Introduce dependency parameter Android.sdk.embedJar
This can be used to embed dependent JAR files in Android APKs.
[ChangeLog][Parameters] Added Android.sdk.embedJar dependency parameter
to control embedding of JAR files in Android APKs.
Change-Id: I76e71710ba5a891bce7feff13e3bd10887d25530
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'share')
-rw-r--r-- | share/qbs/modules/Android/sdk/sdk.qbs | 13 | ||||
-rw-r--r-- | share/qbs/modules/Android/sdk/utils.js | 29 |
2 files changed, 34 insertions, 8 deletions
diff --git a/share/qbs/modules/Android/sdk/sdk.qbs b/share/qbs/modules/Android/sdk/sdk.qbs index 1574b626e..ccf6f4ef2 100644 --- a/share/qbs/modules/Android/sdk/sdk.qbs +++ b/share/qbs/modules/Android/sdk/sdk.qbs @@ -101,6 +101,9 @@ Module { fileTags: ["android.aidl"] } + Parameter { + property bool embedJar: true + } Rule { inputs: ["android.aidl"] @@ -190,18 +193,12 @@ Module { Rule { multiplex: true inputs: ["java.class"] + inputsFromDependencies: ["java.jar"] Artifact { filePath: "classes.dex" fileTags: ["android.dex"] } - prepare: { - var dxFilePath = ModUtils.moduleProperty(product, "dxFilePath"); - var args = ["--dex", "--output", output.filePath, - product.moduleProperty("java", "classFilesDir")]; - var cmd = new Command(dxFilePath, args); - cmd.description = "Creating " + output.fileName; - return [cmd]; - } + prepare: SdkUtils.prepareDex.apply(SdkUtils, arguments) } Rule { diff --git a/share/qbs/modules/Android/sdk/utils.js b/share/qbs/modules/Android/sdk/utils.js index 2f7701f6a..1d825d39b 100644 --- a/share/qbs/modules/Android/sdk/utils.js +++ b/share/qbs/modules/Android/sdk/utils.js @@ -97,3 +97,32 @@ function availableBuildToolsVersions(sdkDir) { return versions; } + +function prepareDex(project, product, inputs, outputs, input, output, explicitlyDependsOn) { + var dxFilePath = product.Android.sdk.dxFilePath; + var args = ["--dex", "--output", output.filePath, product.java.classFilesDir]; + + var jarFiles = []; + function traverseJarDeps(dep) { + if (dep.parameters.Android && dep.parameters.Android.sdk + && dep.parameters.Android.sdk.embedJar === false) + return; + + var isJar = typeof dep.artifacts["java.jar"] !== "undefined"; + if (!isJar) + return; + + dep.artifacts["java.jar"].forEach(function(artifact) { + if (!jarFiles.contains(artifact.filePath)) + jarFiles.push(artifact.filePath); + }); + dep.dependencies.forEach(traverseJarDeps); + } + product.dependencies.forEach(traverseJarDeps); + + args = args.concat(jarFiles); + + var cmd = new Command(dxFilePath, args); + cmd.description = "Creating " + output.fileName; + return [cmd]; +} |