applyGradle static method
Applies the signing settings to android/app/build.gradle(.kts).
Only the signing related parts are changed and other content is kept.
alias is used as the last fallback for the key alias.
android/app/build.gradle(.kts)に署名設定を反映します。
署名に関係する箇所だけを変更し、それ以外の記述は保持します。
aliasはキーエイリアスの最後のフォールバックとして使われます。
Implementation
static Future<void> applyGradle(String alias) async {
label("Add processing to the Gradle file.");
final gradle = AppGradle();
await gradle.load();
if (gradle.isKotlin &&
!gradle.imports.any((e) => e.import == "java.util.Properties")) {
gradle.imports.add(
GradleImport(
import: "java.util.Properties",
),
);
}
if (gradle.isKotlin &&
!gradle.imports.any((e) => e.import == "java.util.Base64")) {
gradle.imports.add(
GradleImport(
import: "java.util.Base64",
),
);
}
if (!gradle.loadProperties.any((e) => e.name == "keyProperties")) {
gradle.loadProperties.add(
GradleLoadProperties(
path: "key.properties",
name: "keyProperties",
file: "keyPropertiesFile",
isKotlin: gradle.isKotlin,
),
);
}
// 署名の参照だけを差し替え、proguardFileなど既存のビルドタイプ設定は残す。
final buildTypes = gradle.android?.buildTypes;
if (buildTypes != null) {
final releaseSigningConfig = gradle.isKotlin
? "signingConfigs.getByName(\"release\")"
: "signingConfigs.release";
final debugSigningConfig = gradle.isKotlin
? "signingConfigs.getByName(\"debug\")"
: "signingConfigs.debug";
if (buildTypes.release == null) {
buildTypes.release =
GradleAndroidBuildType(signingConfig: releaseSigningConfig);
} else {
buildTypes.release!.signingConfig = releaseSigningConfig;
}
if (buildTypes.debug == null) {
buildTypes.debug =
GradleAndroidBuildType(signingConfig: debugSigningConfig);
} else {
buildTypes.debug!.signingConfig = debugSigningConfig;
}
}
// 値は`AndroidSigningEnvironment`が生成するブロックで環境変数 → key.propertiesの順に解決する。
// debugは解決できない場合に既定のデバッグ署名を使う。
gradle.android?.signingConfigs = GradleAndroidSigningConfigs(
release: GradleAndroidSigningConfig(
keyAlias: AndroidSigningEnvironment.keyAliasExpression,
keyPassword: AndroidSigningEnvironment.keyPasswordExpression,
storeFile: AndroidSigningEnvironment.storeFileExpression,
storePassword: AndroidSigningEnvironment.storePasswordExpression,
isKotlin: gradle.isKotlin,
),
debug: GradleAndroidSigningConfig(
keyAlias: "${AndroidSigningEnvironment.keyAliasExpression} ?: keyAlias",
keyPassword:
"${AndroidSigningEnvironment.keyPasswordExpression} ?: keyPassword",
storeFile:
"${AndroidSigningEnvironment.storeFileExpression} ?: storeFile",
storePassword:
"${AndroidSigningEnvironment.storePasswordExpression} ?: storePassword",
isKotlin: gradle.isKotlin,
),
isKotlin: gradle.isKotlin,
);
await gradle.save();
final gradleFile = File(
gradle.isKotlin
? "android/app/build.gradle.kts"
: "android/app/build.gradle",
);
final source = await gradleFile.readAsString();
await gradleFile.writeAsString(
AndroidSigningEnvironment.synchronize(
source,
isKotlin: gradle.isKotlin,
alias: alias,
),
);
}