Skip to content

Instantly share code, notes, and snippets.

@gabrielbiga
Created March 28, 2022 18:01
Show Gist options
  • Select an option

  • Save gabrielbiga/aa4efb87704bc5238efdaa5a9d06fa1d to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown

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