Bug 1411686 - Pre: Fix JNI wrapper dependencies. r=maliu draft
authorNick Alexander <nalexander@mozilla.com>
Mon, 23 Oct 2017 14:57:53 -0700
changeset 686327 0b9d979a0066eda86ec39e9700a2e11e8073cea6
parent 686074 dfb54d604158f5605fb07f41751e36bfef641a2f
child 686328 ee00d5507a63b47b253cb0e310d2fa9a815442a1
push id86165
push usernalexander@mozilla.com
push dateWed, 25 Oct 2017 19:03:20 +0000
reviewersmaliu
bugs1411686
milestone58.0a1
Bug 1411686 - Pre: Fix JNI wrapper dependencies. r=maliu When built as part of a consuming application, a library's bundle* target is called but not its assemble* target. (When built by itself for distribution, a library's assemble* target is called.) This corrects the wrapper dependencies. MozReview-Commit-ID: 9ooHMNPK2U4
mobile/android/gradle/with_gecko_binaries.gradle
--- a/mobile/android/gradle/with_gecko_binaries.gradle
+++ b/mobile/android/gradle/with_gecko_binaries.gradle
@@ -122,24 +122,23 @@ ext.configureVariantWithGeckoBinaries = 
 
     def sourceSet = productFlavor ? "${productFlavor}${buildType.capitalize()}" : buildType
     android.sourceSets."${sourceSet}".assets.srcDir syncOmnijarFromDistDir.destinationDir
     android.sourceSets."${sourceSet}".assets.srcDir syncAssetsFromDistDir.destinationDir
     android.sourceSets."${sourceSet}".jniLibs.srcDir syncLibsFromDistDir.destinationDir
 }
 
 ext.configureVariantWithJNIWrappers = { variant, module ->
+    def jarTask
+    if (module == 'Generated') {
+        jarTask = tasks["package${variant.name.capitalize()}JarArtifact"]
+    } else {
+        jarTask = tasks["jar${variant.name.capitalize()}Classes"]
+    }
 
-    def jarTask = tasks.findByName("jar${variant.name.capitalize()}Classes")
-    if (jarTask == null) {
-        jarTask = tasks.findByName("package${variant.name.capitalize()}JarArtifact")
-    }
-    if (jarTask == null) {
-        throw new GradleException("Jar task not found: \"jar${variant.name.capitalize()}Classes\"\t\"package${variant.name.capitalize()}JarArtifact\"" )
-    }
     if (jarTask.outputs.files.size() != 1) {
         throw new GradleException("Jar task output multiple files other than one single jar")
     }
 
     // At configuration time, the classpath of dependencies with internal_impl
     // JAR files may not be correct.  This manifests in
     //
     // 'Exception in thread "main" java.lang.NoClassDefFoundError: android/support/v4/app/ActivityCompatApi23$RequestPermissionsRequestCodeValidator'
@@ -169,10 +168,14 @@ ext.configureVariantWithJNIWrappers = { 
         args jarTask.outputs.files.iterator().next()
 
         workingDir "${topobjdir}/mobile/android/base"
 
         dependsOn jarTask
         dependsOn prepareDependenciesTask
     }
 
-    variant.assemble.dependsOn wrapperTask
+    if (module == 'Generated') {
+        tasks["bundle${variant.name.capitalize()}"].dependsOn wrapperTask
+    } else {
+        tasks["assemble${variant.name.capitalize()}"].dependsOn wrapperTask
+    }
 }