Android上的Environment.GetCommandLineArgs()中存在NullReferenceException

Android上的Environment.GetCommandLineArgs()中存在NullReferenceException,android,unity3d,Android,Unity3d,我们有一些代码可以通过命令行参数运行,并确定是启动客户机还是服务器(对于Unity Networking游戏)。它的代码是: string[] commandLineArgs = Environment.GetCommandLineArgs(); foreach (string arg in commandLineArgs) { if (arg.StartsWith(PORT_COMMAND_LINE_PREFIX)) var port = int.Parse(arg.S

我们有一些代码可以通过命令行参数运行,并确定是启动客户机还是服务器(对于Unity Networking游戏)。它的代码是:

string[] commandLineArgs = Environment.GetCommandLineArgs();
foreach (string arg in commandLineArgs)
{
    if (arg.StartsWith(PORT_COMMAND_LINE_PREFIX))
        var port = int.Parse(arg.Substring(PORT_COMMAND_LINE_PREFIX.Length).Trim());
        if (port >= 1024 && port < 49151)
        {
            ServerLoader.batchmodeServerPort = port;
        }
    }
    ...
}
string[]commandLineArgs=Environment.GetCommandLineArgs();
foreach(commandLineArgs中的字符串arg)
{
if(参数StartsWith(端口命令行前缀))
var port=int.Parse(arg.Substring(port_COMMAND_LINE_PREFIX.Length).Trim());
如果(端口>=1024&&端口<49151)
{
ServerLoader.batchmodeServerPort=端口;
}
}
...
}

这在独立的windows构建(实际使用的地方)和iOS(我猜参数数组是空的)上都很好。然而,在Android上,我们得到了一个
NullReferenceException
,我们无法确定它的确切位置。

添加调试行后,我们发现它以某种方式被抛出到
环境中。GetCommandLineArgs()
调用自身,而不是返回的数组或数组中的任何内容为null。由于实际上不需要,我们添加了一个:

if (!Application.isMobilePlatform)
{
    string[] commandLineArgs = Environment.GetCommandLineArgs();
...
}
围绕整个命令行参数解析代码。我将此作为我问题的答案发布,因为似乎没有任何其他解释,或者关于此的任何其他问题/答案等等。可能对其他人有用


如果有人不同意,并且认为他们知道可能发生了什么,请发布备选答案:)

有没有-1的原因。。。一些实际反馈可能会有所帮助:)