@@ -40,7 +40,6 @@ def nodeModulesDir = "../../node_modules/"
4040def libDir = " ../../lib/Android/"
4141def pluginNames = new ArrayList<String > ()
4242def configDir = file(configurationsDir)
43- def firstApplicationBuildType = " "
4443
4544def compiteCompileSdkVersion () {
4645 if (project. hasProperty(" compileSdk" )) {
@@ -128,19 +127,15 @@ android {
128127
129128 applicationVariants. all { variant ->
130129 renameResultApks(variant)
131-
132- if (firstApplicationBuildType == " " ) {
133- firstApplicationBuildType = variant. buildType. name;
134- }
135130
136- def mergeAssetsTask = variant. dex
131+ def mergeAssetsTask = variant. mergeAssets
137132 if (project. hasProperty(" runSBGenerator" )) {
138- runBindingGenerator. dependsOn(buildMetadata )
133+ runBindingGenerator. dependsOn(copyMetadata )
139134 rbg. dependsOn(runBindingGenerator)
140135 mergeAssetsTask. dependsOn(rbg)
141136 }
142137 else {
143- mergeAssetsTask. dependsOn(buildMetadata )
138+ mergeAssetsTask. dependsOn(copyMetadata )
144139 }
145140 }
146141}
@@ -323,6 +318,10 @@ task cleanLocalAarFiles(type: Delete) {
323318 delete fileTree(dir : " libs/aar" , include : [" *.aar" ])
324319}
325320
321+ task deleteJavaDir (type : Delete ) {
322+ delete " $rootDir /src/main/java"
323+ }
324+
326325task ensureMetadataOutDir {
327326 def outputDir = file(" $rootDir /metadata/output" )
328327 outputDir. mkdirs()
@@ -348,8 +347,6 @@ task collectAllJars {
348347 allJarPaths. add(currentJarFile. getAbsolutePath())
349348 }
350349
351- allJarPaths. add(" $rootDir /build/intermediates/classes" );
352-
353350 metadataParams. add(" metadata-generator.jar" )
354351 metadataParams. add(" ../metadata/output" )
355352 for (def i = 0 ; i < allJarPaths. size(); i++ ) {
@@ -358,37 +355,56 @@ task collectAllJars {
358355 }
359356}
360357
361- task buildMetadata (type : JavaExec ) {
362- description " builds metadata with provided jar dependencies"
358+ task isMetadataGenerationNecessary {
359+ description " checks if new metadata is necessary based on jar and aar dependencies used"
360+ def inputFile = new File (" build/metadataUTD" )
361+ def metadataDir = new File (" metadata/output" );
363362
364- inputs. files(allJarPaths)
365- inputs. dir(" build/intermediates/classes" )
363+ inputs. file inputFile
364+ outputs. upToDateWhen {
365+ inputFile. exists() &&
366+ metadataDir. exists() &&
367+ metadataDir. list(). length == 3 &&
368+ (inputFile. text. trim() == metadataParams. toString(). trim())
369+ }
366370
367- outputs. files(" metadata/output/treeNodeStream.dat" , " metadata/output/treeStringsStream.dat" , " metadata/output/treeValueStream.dat" )
371+ doLast {
372+ inputFile. text = metadataParams
373+ }
374+ }
368375
376+ task buildMetadata (type : JavaExec ) {
377+ description " builds metadata with provided jar dependencies"
378+ outputs. upToDateWhen {
379+ ! isMetadataGenerationNecessary. didWork
380+ }
381+
369382 doFirst {
370383 workingDir " build-tools"
371384
372385 main " -jar"
373386
374387 args metadataParams. toArray()
375388 }
376-
377- doLast {
378- copy {
379- from " metadata/output "
380- into " build/intermediates/assets/ ${ firstApplicationBuildType } /metadata "
381- }
389+ }
390+
391+ task copyMetadata ( type : Copy ) {
392+ description " moves metadata to the right place before packaging is done "
393+ outputs . upToDateWhen {
394+ ! buildMetadata . didWork
382395 }
396+
397+ from " metadata/output"
398+ into " src/main/assets/metadata"
383399}
384400
385401
386402task deleteExplodedAarFolder (type : Delete ) {
387403
388404 outputs. upToDateWhen {
389- ! buildMetadata . didWork
405+ ! isMetadataGenerationNecessary . didWork
390406 }
391-
407+
392408 def explodedAarDir = project. buildDir. getAbsolutePath() + " /intermediates/exploded-aar"
393409 delete explodedAarDir
394410}
@@ -417,9 +433,12 @@ task rbg (dependsOn: "asbg:generatebindings")
417433// 5. plugin extend (apply from include files)
418434
419435// --execution phase
420- ensureMetadataOutDir. dependsOn(cleanLocalAarFiles)
436+ deleteJavaDir. dependsOn(cleanLocalAarFiles)
437+ ensureMetadataOutDir. dependsOn(deleteJavaDir)
421438collectAllJars. dependsOn(ensureMetadataOutDir)
422- buildMetadata. dependsOn(collectAllJars)
439+ isMetadataGenerationNecessary. dependsOn(collectAllJars)
440+ buildMetadata. dependsOn(isMetadataGenerationNecessary)
441+ copyMetadata. dependsOn(buildMetadata)
423442
424443// DO NOT UNCOMMENT
425444// mergeAssets.dependsOn(copyMetadata) -> look in CONFIGURATIONS(top) in android.applicationVariants to see how it's done
@@ -438,4 +457,4 @@ task buildapk {
438457 }
439458
440459 dependsOn deleteExplodedAarFolder
441- }
460+ }
0 commit comments