Skip to content

Instantly share code, notes, and snippets.

@gabrielbiga
Created March 28, 2022 18:01
Show Gist options
  • Save gabrielbiga/aa4efb87704bc5238efdaa5a9d06fa1d to your computer and use it in GitHub Desktop.
Save gabrielbiga/aa4efb87704bc5238efdaa5a9d06fa1d to your computer and use it in GitHub Desktop.
Fix Firebase issue on {NS} 8.2
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();
});
};
@mannueru
Copy link

mannueru commented Apr 7, 2022

¿Cómo se usa? saludos!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment