/// <summary> /// Compile the given XML file to a binary XML file in the given output folder. /// </summary> public void Build() { #if DEBUG //Debugger.Launch(); #endif // Prepare folder var outputFolder = Path.GetDirectoryName(path); if (!Directory.Exists(outputFolder)) Directory.CreateDirectory(outputFolder); // Sign bar? const bool sign = true; // Load APK var apk = new ApkFile(ApkPath); // Collect entries var entries = new List<BarEntry>(); var apkName = Path.GetFileNameWithoutExtension(path) + ".apk"; entries.Add(new BarEntry(string.Format(@"android\{0}", apkName), ApkPath)); // Collect icon's var apkPath2barPath = new Dictionary<string, string>(); CollectIcons(apk, entries, apkPath2barPath); // Build ZIP var manifest = new MetaInfManifestBuilder(apk, Author, DebugTokenPath, apkPath2barPath); // Build signatures if (sign) { foreach (var entry in entries) { manifest.AddArchiveAsset(entry.Name, entry.Data); //signature.AddSha1Digest(entry.Name, entry.Data); } } // Create zip ////string md5FingerPrint = null; ////string sha1FingerPrint = null; using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) { using (var zipStream = new ZipOutputStream(fileStream) {UseZip64 = UseZip64.Off}) { zipStream.SetLevel(9); zipStream.PutNextEntry(new ZipEntry("META-INF/MANIFEST.MF") { CompressionMethod = CompressionMethod.Deflated }); manifest.WriteTo(zipStream); zipStream.CloseEntry(); ////if (sign) ////{ //// zipStream.PutNextEntry(new ZipEntry("META-INF/LE-C0FC2.SF") //// {CompressionMethod = CompressionMethod.Deflated}); //// signature.WriteTo(zipStream); //// zipStream.CloseEntry(); //// zipStream.PutNextEntry(new ZipEntry("META-INF/LE-C0FC2.RSA") //// {CompressionMethod = CompressionMethod.Deflated}); //// rsa.WriteTo(zipStream, out md5FingerPrint, out sha1FingerPrint); //// zipStream.CloseEntry(); ////} foreach (var entry in entries) { var entryName = entry.Name.Replace('\\', '/'); zipStream.PutNextEntry(new ZipEntry(entryName) { CompressionMethod = GetCompressionMethod(entryName) }); entry.WriteTo(zipStream); zipStream.CloseEntry(); } } } #if NO_FINGERPRINT_YET // Save MD5 fingerprint var md5FingerPrintPath = Path.ChangeExtension(path, ".md5"); File.WriteAllText(md5FingerPrintPath, md5FingerPrint ?? string.Empty); // Save SHA1 fingerprint var sha1FingerPrintPath = Path.ChangeExtension(path, ".sha1"); File.WriteAllText(sha1FingerPrintPath, sha1FingerPrint ?? string.Empty); #endif #if DEBUG && NO_RSA_YET // Create RSA using (var fileStream = new FileStream(Path.Combine(outputFolder, "CERT.RSA"), FileMode.Create, FileAccess.Write)) { rsa.WriteTo(fileStream, out md5FingerPrint, out sha1FingerPrint); } #endif }
/// <summary> /// Compile the given XML file to a binary XML file in the given output folder. /// </summary> public void Build() { #if DEBUG //Debugger.Launch(); #endif // Prepare folder var outputFolder = Path.GetDirectoryName(path); if (!Directory.Exists(outputFolder)) { Directory.CreateDirectory(outputFolder); } // Sign bar? const bool sign = true; // Load APK var apk = new ApkFile(ApkPath); // Collect entries var entries = new List <BarEntry>(); var apkName = Path.GetFileNameWithoutExtension(path) + ".apk"; entries.Add(new BarEntry(string.Format(@"android\{0}", apkName), ApkPath)); // Collect icon's var apkPath2barPath = new Dictionary <string, string>(); CollectIcons(apk, entries, apkPath2barPath); // Build ZIP var manifest = new MetaInfManifestBuilder(apk, Author, DebugTokenPath, apkPath2barPath); // Build signatures if (sign) { foreach (var entry in entries) { manifest.AddArchiveAsset(entry.Name, entry.Data); //signature.AddSha1Digest(entry.Name, entry.Data); } } // Create zip ////string md5FingerPrint = null; ////string sha1FingerPrint = null; using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)) { using (var zipStream = new ZipOutputStream(fileStream) { UseZip64 = UseZip64.Off }) { zipStream.SetLevel(9); zipStream.PutNextEntry(new ZipEntry("META-INF/MANIFEST.MF") { CompressionMethod = CompressionMethod.Deflated }); manifest.WriteTo(zipStream); zipStream.CloseEntry(); ////if (sign) ////{ //// zipStream.PutNextEntry(new ZipEntry("META-INF/LE-C0FC2.SF") //// {CompressionMethod = CompressionMethod.Deflated}); //// signature.WriteTo(zipStream); //// zipStream.CloseEntry(); //// zipStream.PutNextEntry(new ZipEntry("META-INF/LE-C0FC2.RSA") //// {CompressionMethod = CompressionMethod.Deflated}); //// rsa.WriteTo(zipStream, out md5FingerPrint, out sha1FingerPrint); //// zipStream.CloseEntry(); ////} foreach (var entry in entries) { var entryName = entry.Name.Replace('\\', '/'); zipStream.PutNextEntry(new ZipEntry(entryName) { CompressionMethod = GetCompressionMethod(entryName) }); entry.WriteTo(zipStream); zipStream.CloseEntry(); } } } #if NO_FINGERPRINT_YET // Save MD5 fingerprint var md5FingerPrintPath = Path.ChangeExtension(path, ".md5"); File.WriteAllText(md5FingerPrintPath, md5FingerPrint ?? string.Empty); // Save SHA1 fingerprint var sha1FingerPrintPath = Path.ChangeExtension(path, ".sha1"); File.WriteAllText(sha1FingerPrintPath, sha1FingerPrint ?? string.Empty); #endif #if DEBUG && NO_RSA_YET // Create RSA using (var fileStream = new FileStream(Path.Combine(outputFolder, "CERT.RSA"), FileMode.Create, FileAccess.Write)) { rsa.WriteTo(fileStream, out md5FingerPrint, out sha1FingerPrint); } #endif }