예제 #1
0
        private static DumpModel dump(string path)
        {
            if (!File.Exists(path))
            {
                throw new IOException("File not found.");
            }

            var output = new List <string>();
            var aapt   = new AAPTool();

            aapt.Start(string.Format("dump badging \"{0}\"", path));

            while (!aapt.StandardOutput.EndOfStream)
            {
                // Read output line by line, more convenient for parse (than ReadToEnd)
                output.Add(aapt.StandardOutput.ReadLine());
            }

            while (!aapt.StandardError.EndOfStream)
            {
                output.Add(aapt.StandardError.ReadLine());
            }

            aapt.WaitForExit();
            aapt.Close();

            // An error have only 2 messages
            return(new DumpModel(path, output.Count > 5, output));
        }
예제 #2
0
        private static DumpModel dump(
            string path, DumpTypes type, Func <string, int, bool> callback)
        {
            int index      = 0;
            var terminated = false;
            var msg        = string.Empty;
            var aapt       = new AAPTool();
            var output     = new List <string>();

            switch (type)
            {
            case DumpTypes.Manifest:
                aapt.Start($"{command} {manifest} \"{path}\"");
                break;

            case DumpTypes.Resources:
                aapt.Start($"{command} {resources} \"{path}\"");
                break;

            case DumpTypes.ManifestTree:
                aapt.Start($"{command} {manifestTree} \"{path}\" AndroidManifest.xml");
                break;
                //default:
                //    return new DumpModel(path, false, output);
            }

            while (!aapt.StandardOutput.EndOfStream && !terminated)
            {
                msg = aapt.StandardOutput.ReadLine();

                if (callback(msg, index))
                {
                    terminated = true;
                    try {
                        aapt.Kill();
                    }
                    catch { }
                }
                if (!terminated)
                {
                    index++;
                }
                output.Add(msg);
            }

            while (!aapt.StandardError.EndOfStream)
            {
                output.Add(aapt.StandardError.ReadLine());
            }

            try {
                aapt.WaitForExit();
                aapt.Close();
                aapt.Dispose();
            }
            catch { }

            return(new DumpModel(path, output.Count > 2, output));
        }