Version: 2021.3
Language : English
Create a custom activity
Integrating Unity into Android applications

Specify Android Player command-line arguments

A use-case for extending the custom Unity activity is to pass command-line arguments when you launch the Android Player. For information on the available command-line arguments, refer to Command-line arguments.

To specify startup command-line arguments in custom activity:

  1. Create a custom activity and set it as the application entry point.
  2. In the custom activity, override the String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine) method.
  3. In the method, concatenate the cmdLine argument with your own startup arguments then return the result. Important: The cmdLine argument can be an empty string or null so make sure your code handles these possible values.

The following example shows how to specify startup arguments to select the graphics API based on the current device:

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 boolean preferES2() {
        // Use OpenGL ES 2.0 on devices that run Android 5.1 or older
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1)
            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 if (preferES2())
            return appendCommandLineArgument(cmdLine, "-force-gles20");
        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

Apart from the custom activity, you can specify command-line arguments in the following ways:

  • In Android Studio: If you open your project in Android Studio, you can pass startup command-line arguments to Unity through Launch Flags in Run/Debug Configurations dialog.
  • Via Android Debug Bridge (adb): You can pass command-line arguments by launching an Android application via adbAn Android Debug Bridge (ADB). You can use an ADB to deploy an Android package (APK) manually after building. More info
    See in Glossary
    using the following code.
adb shell am start -n "<package_name>/<activity_name>" -e unity <command_line_arguments>

The following example shows how to pass -systemallocator command-line argument to your application.

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

Create a custom activity
Integrating Unity into Android applications