今天在用C#执行aapt解析apk获取信息,使用C#Process对象启动命令行
Process proc = new Process();
proc.StartInfo.FileName = @"D:\apk\aapt.exe";
proc.StartInfo.Arguments = " d badging \"" + fileInfo.FullName+ "\"";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.OutputDataReceived += p_OutputDataReceived;
proc.ErrorDataReceived += p_ErrorDataReceived;
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
由于cmd命令的编码设置是GBK,而APP包是UTF8,所以出现中文乱码,奇数个中文有问题,原因是GBK是一个汉字两个字节,而UTF8是三个字节,原来输出流是UTF8的文字,用GBK去解析导致了最后一个汉字出现‘?‘。解决办法有多种,可以对错误编码字节调整回来,这里有个简单处理方式
proc.StartInfo.StandardOutputEncoding = Encoding.UTF8;设置输出流编码为UTF8要求APKXML用UTF8