android-wrapper/@capacitor/cli/dist/android/build.js

104 lines
4.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildAndroid = void 0;
const tslib_1 = require("tslib");
const path_1 = require("path");
const colors_1 = tslib_1.__importDefault(require("../colors"));
const common_1 = require("../common");
const log_1 = require("../log");
const subprocess_1 = require("../util/subprocess");
async function buildAndroid(config, buildOptions) {
var _a, _b;
const releaseType = (_a = buildOptions.androidreleasetype) !== null && _a !== void 0 ? _a : 'AAB';
const releaseTypeIsAAB = releaseType === 'AAB';
const flavor = (_b = buildOptions.flavor) !== null && _b !== void 0 ? _b : '';
const arg = releaseTypeIsAAB ? `:app:bundle${flavor}Release` : `assemble${flavor}Release`;
const gradleArgs = [arg];
try {
await (0, common_1.runTask)('Running Gradle build', async () => (0, subprocess_1.runCommand)('./gradlew', gradleArgs, {
cwd: config.android.platformDirAbs,
}));
}
catch (e) {
if (e.includes('EACCES')) {
throw `gradlew file does not have executable permissions. This can happen if the Android platform was added on a Windows machine. Please run ${colors_1.default.strong(`chmod +x ./${config.android.platformDir}/gradlew`)} and try again.`;
}
else {
throw e;
}
}
const releaseDir = releaseTypeIsAAB
? flavor !== ''
? `${flavor}Release`
: 'release'
: flavor !== ''
? (0, path_1.join)(flavor, 'release')
: 'release';
const releasePath = (0, path_1.join)(config.android.appDirAbs, 'build', 'outputs', releaseTypeIsAAB ? 'bundle' : 'apk', releaseDir);
const unsignedReleaseName = `app${flavor !== '' ? `-${flavor}` : ''}-release${releaseTypeIsAAB ? '' : '-unsigned'}.${releaseType.toLowerCase()}`;
const signedReleaseName = unsignedReleaseName.replace(`-release${releaseTypeIsAAB ? '' : '-unsigned'}.${releaseType.toLowerCase()}`, `-release-signed.${releaseType.toLowerCase()}`);
if (buildOptions.signingtype == 'jarsigner') {
await signWithJarSigner(config, buildOptions, releasePath, signedReleaseName, unsignedReleaseName);
}
else {
await signWithApkSigner(config, buildOptions, releasePath, signedReleaseName, unsignedReleaseName);
}
(0, log_1.logSuccess)(`Successfully generated ${signedReleaseName} at: ${releasePath}`);
}
exports.buildAndroid = buildAndroid;
async function signWithApkSigner(config, buildOptions, releasePath, signedReleaseName, unsignedReleaseName) {
if (!buildOptions.keystorepath || !buildOptions.keystorepass) {
throw 'Missing options. Please supply all options for android signing. (Keystore Path, Keystore Password)';
}
const signingArgs = [
'sign',
'--ks',
buildOptions.keystorepath,
'--ks-pass',
`pass:${buildOptions.keystorepass}`,
'--in',
`${(0, path_1.join)(releasePath, unsignedReleaseName)}`,
'--out',
`${(0, path_1.join)(releasePath, signedReleaseName)}`,
];
if (buildOptions.keystorealias) {
signingArgs.push('--ks-key-alias', buildOptions.keystorealias);
}
if (buildOptions.keystorealiaspass) {
signingArgs.push('--key-pass', `pass:${buildOptions.keystorealiaspass}`);
}
await (0, common_1.runTask)('Signing Release', async () => {
await (0, subprocess_1.runCommand)('apksigner', signingArgs, {
cwd: config.android.platformDirAbs,
});
});
}
async function signWithJarSigner(config, buildOptions, releasePath, signedReleaseName, unsignedReleaseName) {
if (!buildOptions.keystorepath ||
!buildOptions.keystorealias ||
!buildOptions.keystorealiaspass ||
!buildOptions.keystorepass) {
throw 'Missing options. Please supply all options for android signing. (Keystore Path, Keystore Password, Keystore Key Alias, Keystore Key Password)';
}
const signingArgs = [
'-sigalg',
'SHA1withRSA',
'-digestalg',
'SHA1',
'-keystore',
buildOptions.keystorepath,
'-keypass',
buildOptions.keystorealiaspass,
'-storepass',
buildOptions.keystorepass,
`-signedjar`,
`${(0, path_1.join)(releasePath, signedReleaseName)}`,
`${(0, path_1.join)(releasePath, unsignedReleaseName)}`,
buildOptions.keystorealias,
];
await (0, common_1.runTask)('Signing Release', async () => {
await (0, subprocess_1.runCommand)('jarsigner', signingArgs, {
cwd: config.android.platformDirAbs,
});
});
}