# 指定 Android Player 的命令行参数

> Specify startup command-line arguments to pass to Unity.

扩展自定义 Unity 活动的一个常见用例是在启动 Android Player 时传递命令行参数。有关可用命令行参数的详细信息，请参阅[命令行参数](/engine/6000.0/manual/unity-editor/editor-features/command-line-arguments.md)。

要在自定义活动中指定启动命令行参数，请按照以下步骤操作：

1. [创建自定义活动](/engine/6000.0/manual/platform-specific/android/developing/application-entries/activity/unity-player-activity/custom-activity.md)并将其设置为应用程序的入口点。
2. 在自定义活动中，重载 `String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine)` 方法。
3. 在该方法中，将 `cmdLine` 参数与您自己的启动参数拼接，然后返回结果。**重要提示**：`cmdLine` 参数可能为空字符串或 null，因此请确保代码处理这些可能的值。

以下示例展示了如何根据当前设备选择图形 API 来指定启动参数：

```java
package com.company.product;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import android.os.Build;

public class OverrideExample extends UnityPlayerActivity {
    private boolean preferVulkan() {
        // Use Vulkan on Google Pixel devices
        if (Build.MANUFACTURER.equals("Google") && Build.MODEL.startsWith("Pixel"))
            return true;
        else
            return false;
    }

    private String appendCommandLineArgument(String cmdLine, String arg) {
        if (arg == null || arg.isEmpty())
            return cmdLine;
        else if (cmdLine == null || cmdLine.isEmpty())
            return arg;
        else
            return cmdLine + " " + arg; 
    } 

    @Override protected String updateUnityCommandLineArguments(String cmdLine)
    {
        if (preferVulkan())
            return appendCommandLineArgument(cmdLine, "-force-vulkan");
        else
            return cmdLine; // let Unity pick the Graphics API based on PlayerSettings
    }

    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
}
```

### 指定命令行参数的其他方法##additional-ways-to-specify-command-line-arguments

除了通过自定义活动指定命令行参数外，您还可以通过以下方式实现：

* **在 Android Studio 中指定**：如果在 Android Studio 中打开项目，可以通过 [Run/Debug Configurations 对话框](https://developer.android.com/studio/run/rundebugconfig#opening)中的 Launch Flags 将启动命令行参数传递给 Unity。
* **通过 Android Debug Bridge (adb) 指定**：您可以通过以下代码使用 adb 启动 Android 应用程序，并传递命令行参数。

```
adb shell am start -n "<package_name>/<activity_name>" -e unity <command_line_arguments>
```

以下示例展示了如何将 `-systemallocator` 命令行参数传递给应用程序。

```
adb shell am start -n "com.Company.MyGame/com.unity3d.player.UnityPlayerActivity" -e unity -systemallocator
```
