Created
March 28, 2022 18:01
Fix Firebase issue on {NS} 8.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var path = require("path"); | |
var fs = require("fs"); | |
module.exports = function($logger, $projectData) { | |
let buildGradleContent; | |
function patchNode(node, check, content = check) | |
{ | |
const originalDepNode = buildGradleContent.match( | |
new RegExp(node + " {[\\s\\S]*?}", "gi") | |
).shift(); | |
if (!originalDepNode || originalDepNode.indexOf(check) > 0) { | |
return; | |
} | |
const endNode = originalDepNode.indexOf("}", 0); | |
const modDepNode = originalDepNode.substring(0, endNode - 1) | |
+ ' ' + content + '\n' | |
+ originalDepNode.substring(endNode - 1); | |
buildGradleContent = buildGradleContent.replace( | |
originalDepNode, | |
modDepNode | |
); | |
} | |
return new Promise(function(resolve, reject) { | |
$logger.info("Configure firebase"); | |
let projectBuildGradlePath = path.join($projectData.platformsDir, "android", "build.gradle"); | |
if (fs.existsSync(projectBuildGradlePath)) { | |
buildGradleContent = fs.readFileSync(projectBuildGradlePath).toString(); | |
patchNode( | |
"repositories", | |
"google()" | |
); | |
patchNode( | |
"repositories", | |
"https://dl.bintray.com/android/android-tools", | |
'maven { url "https://dl.bintray.com/android/android-tools" }' | |
); | |
patchNode( | |
"dependencies", | |
"com.google.firebase:firebase-crashlytics-gradle", | |
'classpath "com.google.firebase:firebase-crashlytics-gradle:2.3.0"' | |
); | |
// Remove maybe old google services | |
buildGradleContent = buildGradleContent.replace( | |
/classpath ('|")com\.google\.gms:google-services:\d+\.\d+\.\d+('|")/, '' | |
); | |
patchNode( | |
"dependencies", | |
"com.google.gms:google-services", | |
'classpath "com.google.gms:google-services:4.3.4"' | |
); | |
fs.writeFileSync(projectBuildGradlePath, buildGradleContent); | |
} | |
let projectAppBuildGradlePath = path.join($projectData.platformsDir, "android", "app", "build.gradle"); | |
if (fs.existsSync(projectAppBuildGradlePath)) { | |
let appBuildGradleContent = fs.readFileSync(projectAppBuildGradlePath).toString(); | |
if (appBuildGradleContent.indexOf("buildMetadata.finalizedBy(copyMetadata)") === -1) { | |
appBuildGradleContent = appBuildGradleContent.replace( | |
"ensureMetadataOutDir.finalizedBy(buildMetadata)", | |
"ensureMetadataOutDir.finalizedBy(buildMetadata)\n\t\tbuildMetadata.finalizedBy(copyMetadata)" | |
); | |
appBuildGradleContent += ` | |
task copyMetadata { | |
doFirst { | |
// before tns-android 5.2.0 its gradle version didn't have this method implemented, so pri | |
android.applicationVariants.all { variant -> | |
if (variant.buildType.name == project.selectedBuildType) { | |
def task | |
if (variant.metaClass.respondsTo(variant, "getMergeAssetsProvider")) { | |
def provider = variant.getMergeAssetsProvider() | |
task = provider.get(); | |
} else { | |
// fallback for older android gradle plugin versions | |
task = variant.getMergeAssets() | |
} | |
for (File file : task.getOutputs().getFiles()) { | |
if (!file.getPath().contains("/incremental/")) { | |
project.ext.mergedAssetsOutputPath = file.getPath() | |
} | |
} | |
} | |
} | |
} | |
doLast { | |
copy { | |
if (!project.mergedAssetsOutputPath) { | |
// mergedAssetsOutputPath not found fallback to the default value for android gradle plugin 3.4.0 | |
project.ext.mergedAssetsOutputPath = "$projectDir/build/intermediates/assets/" + project.selectedBuildType + "/out" | |
} | |
from "$projectDir/src/main/assets/metadata" | |
into project.mergedAssetsOutputPath + "/metadata" | |
} | |
} | |
}`; | |
fs.writeFileSync(projectAppBuildGradlePath, appBuildGradleContent); | |
} | |
} | |
resolve(); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
¿Cómo se usa? saludos!