android-sdk-numic-plugin
Version:
Configures native Android installation to match installed SDK.
99 lines (95 loc) • 3.32 kB
JavaScript
// index.ts
import { execSync } from "node:child_process";
import { join as join2 } from "path";
// match-version.ts
import semverSort from "semver-sort";
var findNewestBuildToolsVersion = (sdkManagerListOutput) => {
const matches = [...sdkManagerListOutput.matchAll(/build-tools;(\d{1,3}\.\d{1,3}\.\d{1,10})/g)];
if (!matches || !Array.isArray(matches)) {
return void 0;
}
const availableVersions = matches.map((match) => match[1]);
const sortedVersions = semverSort.desc(availableVersions);
return sortedVersions[0];
};
var getMajorFromVersion = (version) => {
return parseInt(version.split(".")[0], 10);
};
var matchVersion = (sdkManagerListOutput) => {
const buildToolsVersion = findNewestBuildToolsVersion(sdkManagerListOutput);
const majorSdkVersion = getMajorFromVersion(buildToolsVersion);
return {
buildToolsVersion,
compileSdkVersion: majorSdkVersion,
targetSdkVersion: majorSdkVersion
};
};
// replace-versions.ts
import { readFileSync, writeFileSync } from "node:fs";
import { join } from "node:path";
var replaceVersions = ({ compileSdkVersion, targetSdkVersion, minSdkVersion, buildToolsVersion }, androidFolder) => {
const buildGradlePath = join(androidFolder, "build.gradle");
let buildGradleContents = readFileSync(buildGradlePath, "utf-8");
if (buildToolsVersion) {
buildGradleContents = buildGradleContents.replace(
/(buildToolsVersion\s*=\s*")(\d{1,3}\.\d{1,3}\.\d{1,10})(")/,
`$1${buildToolsVersion}$3`
);
}
if (minSdkVersion) {
buildGradleContents = buildGradleContents.replace(
/(minSdkVersion\s*=\s*)(\d{1,3})/,
`$1${minSdkVersion}`
);
}
if (compileSdkVersion) {
buildGradleContents = buildGradleContents.replace(
/(compileSdkVersion\s*=\s*)(\d{1,3})/,
`$1${compileSdkVersion}`
);
}
if (targetSdkVersion) {
buildGradleContents = buildGradleContents.replace(
/(targetSdkVersion\s*=\s*)(\d{1,3})/,
`$1${targetSdkVersion}`
);
}
writeFileSync(buildGradlePath, buildGradleContents);
};
// index.ts
var android_sdk_numic_plugin_default = async ({
nativePath = process.cwd(),
// eslint-disable-next-line no-console
log = console.log,
options = {}
}) => {
const androidFolder = join2(nativePath, "android");
const androidHome = execSync("echo $ANDROID_HOME").toString();
if (!androidHome) {
log("Missing $ANDROID_HOME variable in PATH", "warning");
return;
}
let output;
try {
output = execSync("$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed", {
stdio: "pipe"
// Do not print errors.
}).toString();
} catch (error) {
log(
"Failed to run sdkmanager, make sure to install and update the Android SDK Command-line Tools and make sure Android Studio is up-to-date",
"warning"
);
return;
}
const matchedInstalledVersions = matchVersion(output);
options.buildToolsVersion ||= matchedInstalledVersions.buildToolsVersion ?? "35.0.0";
options.compileSdkVersion ||= matchedInstalledVersions.compileSdkVersion ?? 35;
options.targetSdkVersion ||= matchedInstalledVersions.targetSdkVersion ?? 35;
options.minSdkVersion ||= 24;
replaceVersions(options, androidFolder);
};
export {
android_sdk_numic_plugin_default as default
};
//# sourceMappingURL=index.js.map