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)); }
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)); }