public static void RepackAPK(string pathToApk, string unpackedDir) { bool apiLevel11OrGreater = (PlayerSettings.Android.minSdkVersion >= AndroidSdkVersions.AndroidApiLevel11); ModifyManifestFile(Path.Combine(unpackedDir, "AndroidManifest.xml"), apiLevel11OrGreater); CleanStreamingAssets(Path.Combine(unpackedDir, "assets")); // Pack the unpacked apk StartProcess("java", string.Format("-jar \"{0}\" b \"{1}\"", Path.Combine(GetAPKToolDir(), "apktool.jar"), unpackedDir)); // Sign the apk string apkName = Path.GetFileName(pathToApk); string pathToRepackedApk = Path.Combine(Path.Combine(unpackedDir, "dist"), apkName); KeyStoreInfo ksInfo = GetKeyStoreInfo(); StartProcess("jarsigner", string.Format("-sigalg MD5withRSA -digestalg SHA1 -keystore \"{0}\" -storepass {1} -keypass {2} \"{3}\" {4}", ksInfo.KeyStoreFile, ksInfo.StorePass, ksInfo.KeyPass, pathToRepackedApk, ksInfo.Alias ) ); // Align the apk string pathToZipAlign = Path.Combine(GetAndroidSDKDir(), "tools/zipalign"); StartProcess(pathToZipAlign, string.Format("-f 4 \"{0}\" \"{1}\"", pathToRepackedApk, pathToApk)); // Delete the temp dir Directory.Delete(unpackedDir, true); }
private static KeyStoreInfo GetKeyStoreInfo() { KeyStoreInfo ksInfo = new KeyStoreInfo(); if (!string.IsNullOrEmpty(PlayerSettings.Android.keystoreName)) { ksInfo.KeyStoreFile = PlayerSettings.Android.keystoreName; ksInfo.StorePass = PlayerSettings.Android.keystorePass; ksInfo.KeyPass = PlayerSettings.Android.keyaliasPass; ksInfo.Alias = PlayerSettings.Android.keyaliasName; } return(ksInfo); }
public static void RepackAPK(string pathToApk, string unpackedDir) { bool apiLevel11OrGreater = (PlayerSettings.Android.minSdkVersion >= AndroidSdkVersions.AndroidApiLevel11); ModifyManifestFile(Path.Combine(unpackedDir, "AndroidManifest.xml"), apiLevel11OrGreater); CleanStreamingAssets(Path.Combine(unpackedDir, "assets")); CopyMobileNetDll(Path.Combine(unpackedDir, "assets/bin/Data/Managed"), Path.Combine(Application.dataPath, "Plugins")); // Pack the unpacked apk StartProcess("java", string.Format("-jar \"{0}\" b \"{1}\"", Path.Combine(GetAPKToolDir(), "apktool.jar"), unpackedDir)); // Sign the apk string apkName = Path.GetFileName(pathToApk); string pathToRepackedApk = Path.Combine(Path.Combine(unpackedDir, "dist"), apkName); KeyStoreInfo ksInfo = GetKeyStoreInfo(); StartProcess("jarsigner", string.Format("-sigalg MD5withRSA -digestalg SHA1 -keystore \"{0}\" -storepass {1} -keypass {2} \"{3}\" {4}", ksInfo.KeyStoreFile, ksInfo.StorePass, ksInfo.KeyPass, pathToRepackedApk, ksInfo.Alias ) ); // Align the apk string zipalignExt = Application.platform == RuntimePlatform.WindowsEditor ? ".exe" : ""; string pathToZipAlign = Path.Combine(GetAPKToolDir(), "zipalign" + zipalignExt); StartProcess(pathToZipAlign, string.Format("-f 4 \"{0}\" \"{1}\"", pathToRepackedApk, pathToApk)); // Delete the temp dir Directory.Delete(unpackedDir, true); }
private static KeyStoreInfo GetKeyStoreInfo() { KeyStoreInfo ksInfo = new KeyStoreInfo(); if (!string.IsNullOrEmpty(PlayerSettings.Android.keystoreName)) { ksInfo.KeyStoreFile = PlayerSettings.Android.keystoreName; ksInfo.StorePass = PlayerSettings.Android.keystorePass; ksInfo.KeyPass = PlayerSettings.Android.keyaliasPass; ksInfo.Alias = PlayerSettings.Android.keyaliasName; } return ksInfo; }