aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-08-02 16:22:30 -0700
committerJake Petroules <jake.petroules@qt.io>2017-08-09 17:30:46 +0000
commit22ac36861826472f6a572bb9af6c2181d5c63438 (patch)
tree679f2402ca11a08f5046a67d55d29de65068485e /share
parent1d4a716af28d167cc151f30f8f621727579b70fc (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.qbs13
-rw-r--r--share/qbs/modules/Android/sdk/utils.js29
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];
+}