Beispiel #1
0
        /// <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
        }
Beispiel #2
0
        /// <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
        }