org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: URI and package arguments are required

Hi,
I am getting " org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: URI and package arguments are required ".

This is my code
package androidSec;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;
import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.*;
import org.zaproxy.clientapi.core.ApiResponse;
import org.zaproxy.clientapi.core.ApiResponseElement;
import org.zaproxy.clientapi.core.ClientApi;
import org.zaproxy.clientapi.core.ClientApiException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;

public class Sample {

private AndroidDriver driver;
private ClientApi zapClient;
public static final String zapAddress = "0.0.0.0";
public static final int zapPort = 8085;
public static final String zapApiKey = "b5ivdnnb8uc3ei9sgq7mj50gq8";

@BeforeTest
public void setUpAppium() throws MalformedURLException, InterruptedException {
    // Desired capabilities for the Android device
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android");
    capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.vajro.robin");
    capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.vajro.robin.kotlin.ui.splash.activity.SplashActivityKt");
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
    capabilities.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, "true");

    // Set up proxy for OWASP ZAP
    Proxy proxy = new Proxy();
    proxy.setHttpProxy(zapAddress + ":" + zapPort);
    proxy.setSslProxy(zapAddress + ":" + zapPort);
    capabilities.setCapability(MobileCapabilityType.PROXY, proxy);

    try {
        URI uri = new URI("http://127.0.0.1:4723/wd/hub");
        URL url = uri.toURL();
        driver = new AndroidDriver(url, capabilities);
        Thread.sleep(5000);
    } catch (URISyntaxException | MalformedURLException | InterruptedException e) {
        e.printStackTrace();
    }

    zapClient = new ClientApi(zapAddress, zapPort, zapApiKey);
}

@Test
public void testAppFunctionality() throws InterruptedException, ClientApiException {
    // Your test cases here, interact with the app using driver.findElement()
    launchApp();

    // Perform your interactions here
    int clickCount = 6;
    for (int i = 0; i < clickCount; i++) {
        driver.findElement(By.id("com.vajro.robin:id/imgPreviewLogo")).click();
    }
    Thread.sleep(5000);
    driver.findElement(By.id("com.vajro.robin:id/cvPreviewSearchView")).click();
    driver.findElement(By.id("com.vajro.robin:id/ivAppIdSearch")).click();
    Thread.sleep(5000);
    driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.appcompat.widget.LinearLayoutCompat/android.widget.FrameLayout/android.widget.ListView/android.widget.CheckedTextView[2]")).click();
    driver.findElement(By.id("com.vajro.robin:id/etSearch")).sendKeys("32630");
    Thread.sleep(5000);
    driver.findElement(By.id("com.vajro.robin:id/tvClientAppId")).isDisplayed();
    Thread.sleep(5000);
    driver.findElement(By.id("com.vajro.robin:id/llClient")).click();
    Thread.sleep(5000);
    driver.findElement(By.id("com.vajro.robin:id/tvClientProfileOpenApp")).isDisplayed();
    driver.findElement(By.id("com.vajro.robin:id/tvClientProfileOpenApp")).click();
    Thread.sleep(5000);

    // Trigger passive scanning with OWASP ZAP (example)
    zapClient.pscan.enableAllScanners();
    zapClient.pscan.setScannerAlertThreshold("10000", "OFF");
    zapClient.pscan.enableScanners("true");

    // Wait for the scan to complete
    while (!"0".equals(getRecordsToScan())) {
        Thread.sleep(5000);
    }
}

private void launchApp() throws ClientApiException {
    String appPackage = "com.vajro.robin";
    String appActivity = "com.vajro.robin.kotlin.ui.splash.activity.SplashActivityKt";
    String appIntent = "intent://#Intent;"
            + "package=" + appPackage + ";"
            + "action=android.intent.action.MAIN;"
            + "component=" + appPackage + "/" + appActivity + ";"
            + "end";

    try {
        driver.executeScript("mobile:deepLink", Collections.singletonMap("url", appIntent));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private String getRecordsToScan() throws ClientApiException {
    ApiResponse response = zapClient.pscan.recordsToScan();
    ApiResponseElement element = (ApiResponseElement) response;
    return element.getValue();
}

@AfterTest
public void tearDown() {
    // Quit the driver
    if (driver != null) {
        driver.quit();
    }
}

}

Unfortunately Appium server does not support proxies, so that won’t work

Could you please suggest me how to automate ZAP passive scan in an android app using TestNG Java?

I don’t know, never worked with that