/// <summary> /// Emulates Unity's File -> Build And Run menu option. /// </summary> private static void EmulateUnityBuildAndRun() { var androidSdk = new AndroidSdk(); var androidSdkPlatform = new AndroidSdkPlatform(androidSdk); var androidBuildTools = new AndroidBuildTools(androidSdk); var javaUtils = new JavaUtils(); var apkSigner = new ApkSigner(androidBuildTools, javaUtils); var androidBuilder = new AndroidBuilder(androidSdkPlatform, apkSigner); var buildToolLogger = new BuildToolLogger(); if (!androidBuilder.Initialize(buildToolLogger)) { return; } if (EditorUserBuildSettings.androidBuildSystem == AndroidBuildSystem.Gradle) { EditorUserBuildSettings.exportAsGoogleAndroidProject = false; } var artifactName = AndroidAppBundle.IsNativeBuildEnabled() ? "temp.aab" : "temp.apk"; var artifactPath = Path.Combine(Path.GetTempPath(), artifactName); var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(artifactPath); buildPlayerOptions.options |= BuildOptions.AutoRunPlayer; androidBuilder.Build(buildPlayerOptions); }
public static void Main(string[] args) { if (args.Length == 0) { App app = new App(); app.InitializeComponent(); app.Run(); } else { string apkPath = args[0]; if (string.IsNullOrEmpty(apkPath) == false) { if (File.Exists(apkPath) == true) { // MessageBox.Show(apkPath); var window = new LoadingWindow(); var apkSigner = new ApkSigner(); apkSigner.SetApkPath(apkPath); apkSigner.Execute(); apkSigner.FinishCallBack += window.FinishCallBack; App.LoggerCallBack += window.Log; window.ShowDialog(); } } } }
public void SignFile(string inputFileName, X509Certificate2 certificate, string timestampServer, SignFileRequest signFileRequest, SignFileResponse signFileResponse) { SignFileResponseResult successResult = SignFileResponseResult.FileSigned; if (IsFileSigned(inputFileName)) { if (signFileRequest.OverwriteSignature) { successResult = SignFileResponseResult.FileResigned; } else { signFileResponse.Result = SignFileResponseResult.FileAlreadySigned; return; } } var outputFileName = inputFileName + ".signed"; try { if (string.IsNullOrEmpty(signFileRequest.HashAlgorithm) || !ApkSupportedHashAlgorithms.TryGetValue(signFileRequest.HashAlgorithm, out var digestAlgorithm)) { digestAlgorithm = null; } var isV2SigningEnabled = ".apk".Equals(Path.GetExtension(inputFileName), StringComparison.InvariantCultureIgnoreCase) && // v2 only for APKs not for JARs (digestAlgorithm == null || !digestAlgorithm.Equals(DigestAlgorithm.SHA1)) // v2 signing requires SHA256 or SHA512 ; var apkSigner = new ApkSigner(certificate, inputFileName, outputFileName) { V1SigningEnabled = true, V2SigningEnabled = isV2SigningEnabled, DigestAlgorithm = digestAlgorithm }; apkSigner.Sign(); File.Delete(inputFileName); File.Move(outputFileName, inputFileName); signFileResponse.Result = successResult; signFileResponse.FileContent = new FileStream(inputFileName, FileMode.Open, FileAccess.Read); signFileResponse.FileSize = signFileResponse.FileContent.Length; } catch { if (File.Exists(outputFileName)) { File.Delete(outputFileName); } throw; } }
private void BtnSave_Click(object sender, EventArgs e) { _manager.WriteAllOpenAssets(); _fileProvider.Save(); if (_fileProvider is ApkAssetsFileProvider) { ApkSigner s = new ApkSigner(BSConst.DebugCertificatePEM); s.Sign(_fileProvider); } CloseStuff(); }
private static AppBundleBuilder CreateAppBundleBuilder(string workingDirectoryPath) { var androidSdk = new AndroidSdk(); var javaUtils = new JavaUtils(); var androidSdkPlatform = new AndroidSdkPlatform(androidSdk); var androidBuildTools = new AndroidBuildTools(androidSdk); var apkSigner = new ApkSigner(androidBuildTools, javaUtils); var jarSigner = new JarSigner(javaUtils); return(new AppBundleBuilder( new AndroidAssetPackagingTool(androidBuildTools, androidSdkPlatform), new AndroidBuilder(androidSdkPlatform, apkSigner), new BundletoolHelper(javaUtils), jarSigner, workingDirectoryPath, new ZipUtils(javaUtils))); }
private void SignApk(string apkFilename) { try { using (var apk = new ZipFileProvider(apkFilename, FileCacheMode.None, false, QuestomAssets.Utils.FileUtils.GetTempDirectory())) { ApkSigner signer = new ApkSigner(QuestomAssets.BeatSaber.BSConst.DebugCertificatePEM); signer.Sign(apk); } UpdateStatus("APK signed!"); } catch (Exception ex) { Log.LogErr($"Exception signing the APK {apkFilename}!", ex); UpdateStatus("Error re-signing the APK!"); throw new ModException($"Exception signing the APK {apkFilename}!", ex); } }
/// <summary> /// Builds an APK to a temporary location, then installs and runs it using ia.jar /// </summary> private static void BuildAndRunApk(BuildToolLogger buildToolLogger) { var androidSdk = new AndroidSdk(); var androidSdkPlatform = new AndroidSdkPlatform(androidSdk); var androidBuildTools = new AndroidBuildTools(androidSdk); var javaUtils = new JavaUtils(); var apkSigner = new ApkSigner(androidBuildTools, javaUtils); var androidBuilder = new AndroidBuilder(androidSdkPlatform, apkSigner); var playInstantBuildHelper = new PlayInstantBuildHelper(isInstantRequired: true); if (!androidBuilder.Initialize(buildToolLogger) || !playInstantBuildHelper.Initialize(buildToolLogger) || !javaUtils.Initialize(buildToolLogger)) { return; } var jarPath = IaJarPath; if (jarPath == null) { buildToolLogger.DisplayErrorDialog("Build and Run failed to locate ia.jar file"); return; } AndroidAppBundle.DisableNativeBuild(); var apkPath = Path.Combine(Path.GetTempPath(), "temp.apk"); Debug.LogFormat("Build and Run package location: {0}", apkPath); var buildPlayerOptions = AndroidBuildHelper.CreateBuildPlayerOptions(apkPath); if (!androidBuilder.BuildAndSign(buildPlayerOptions)) { // Do not log here. The method we called was responsible for logging. return; } InstallInstantApp(jarPath, apkPath, androidSdk, javaUtils); }
private void Page_Loaded(object sender, RoutedEventArgs e) { this.apkSigner = new ApkSigner(); }