- 背景
之前安卓真机调试看日志,一直用的是Android Studio自带的adb命令进行看日志,不太方便,改用Unity自带的安卓日志插件时,存在中文日志乱码问题。
- 插件安装
基于Unity6000.1.11版本:Window -> Package Management -> Package Manager,即可打开包管理工具,选择Unity Registry分类,找到Android Logcat插件,导入即可。
- 插件使用
打开插件:Window -> Analysis -> Android Logcat,手机开启调试模式后,使用数据线连接电脑,在该插件面板默认会自动选择手机并输出日志(需手机先运行程序,每次运行后,每次选择)。可在顶部选择要调试程序的包名,输出的日志更整洁。
- 乱码解决
找到插件源码:Editor/AndroidLogcatMessageProvider.cs
cs
public override void Start()
{
var arguments = LogcatArguments();
AndroidLogcatInternalLog.Log("\n\nStarting logcat\n\n");
AndroidLogcatInternalLog.Log("{0} {1}", m_ADB.GetADBPath(), arguments);
m_LogcatProcess = new Process();
m_LogcatProcess.StartInfo.FileName = m_ADB.GetADBPath();
m_LogcatProcess.StartInfo.Arguments = arguments;
m_LogcatProcess.StartInfo.RedirectStandardError = true;
m_LogcatProcess.StartInfo.RedirectStandardOutput = true;
m_LogcatProcess.StartInfo.UseShellExecute = false;
m_LogcatProcess.StartInfo.CreateNoWindow = true;
//中文乱码修复,增加两行代码
m_LogcatProcess.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
m_LogcatProcess.StartInfo.StandardErrorEncoding = System.Text.Encoding.UTF8;
m_LogcatProcess.OutputDataReceived += OutputDataReceived;
m_LogcatProcess.ErrorDataReceived += OutputDataReceived;
m_LogcatProcess.Start();
m_LogcatProcess.BeginOutputReadLine();
m_LogcatProcess.BeginErrorReadLine();
}
找到插件源码:Editor/AndroidTools/Shell.cscishi
cs
internal static ShellReturnInfo RunProcess(ShellStartInfo startInfo)
{
Process process = new Process();
process.StartInfo.FileName = startInfo.FileName;
process.StartInfo.Arguments = startInfo.Arguments;
process.StartInfo.WorkingDirectory = startInfo.WorkingDirectory;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
//中文乱码修复,增加两行代码
process.StartInfo.StandardOutputEncoding = Encoding.UTF8;
process.StartInfo.StandardErrorEncoding = Encoding.UTF8;
...
}
此时,日志就能够正常显示中了。