29 int?
Jdk => TryGetValue<int?>(() =>
Jdk);
38 int?
Sdk => TryGetValue<int?>(() =>
Sdk);
59 | Clean up the Android folder inside Intermediate
63 .OnlyWhenStatic(this.IsAndroidPlatform)
68 (
ProjectFolder /
"Intermediate" /
"Android").DeleteDirectory();
85 .OnlyWhenStatic(this.IsAndroidPlatform)
86 .DependsOn(SetupPlatformSdk)
92 var androidRuntimeSettings =
ReadIniHierarchy(
"Engine")?[
"/Script/AndroidRuntimeSettings.AndroidRuntimeSettings"];
93 var keyStore = androidRuntimeSettings?.GetFirst(
"KeyStore").Value;
94 var password = androidRuntimeSettings?.GetFirst(
"KeyStorePassword").Value;
95 var keystorePath =
ProjectFolder /
"Build" /
"Android" / keyStore;
97 Assert.False(
string.IsNullOrWhiteSpace(keyStore),
"There was no keystore specified");
98 Assert.True(keystorePath.FileExists(),
"Specified keystore was not found");
100 if (
string.IsNullOrWhiteSpace(password))
101 password = androidRuntimeSettings?.GetFirst(
"KeyPassword").Value;
103 Assert.False(
string.IsNullOrWhiteSpace(password),
"There was no keystore password specified");
106 var kspassFile = TemporaryDirectory /
"Android" /
"kspass";
107 if (!kspassFile.Parent.DirectoryExists())
109 kspassFile.Parent.CreateDirectory();
111 kspassFile.WriteAllText(password);
113 var sdk = this.GetAndroidSdk();
114 sdk.GetApkSigner(
this)(
115 $
"sign --ks \"{keystorePath}\" --ks-pass \"file:{kspassFile}\" \"{this.GetApkFile()}\""
ConfigIni ReadIniHierarchy(string shortName, IniHierarchyLevel lowestLevel=IniHierarchyLevel.Base, IniHierarchyLevel highestLevel=IniHierarchyLevel.Saved, bool considerPlugins=true, IEnumerable< string >? extraConfigSubfolder=null)
Read INI configuration emulating the same hierarchy of importance as Unreal Engine also does.