AIMA开放平台文档中心Agent SDK (Android)

快速开始 · Android

快速开始 · Android

5 分钟接入 Android SDK。已经熟悉 Java SDK 快速开始 的同学可以直接跳到 Gradle 引入 + Android 权限。

环境要求

项要求
Android StudioLadybug 或更新
Android Gradle Plugin8.7+
Gradle8.9+
JDK17(构建期)
minSdk26(Android 8.0)
compileSdk / targetSdk36
Java 兼容sourceCompatibility = VERSION_17 + coreLibraryDesugaringEnabled = true

Gradle 引入

settings.gradle(Groovy DSL):

groovy
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://artifactory.infra.agibot.com/artifactory/central-maven-snapshots-local")
        }
    }
}

app/build.gradle:

groovy
plugins {
    id 'com.android.application'
}

android {
    namespace 'com.example.myapp'
    compileSdk 36

    defaultConfig {
        applicationId 'com.example.myapp'
        minSdk 26
        targetSdk 36
        versionCode 1
        versionName '1.0'
    }

    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'

    implementation 'com.agibot.aiem:linksoul-agentsdk:1.5.0-SNAPSHOT'

    // 需要遥操 + TRRO 拉流的操作员 App 再加:
    implementation 'com.tencent.trro:remote:2.5.1.131'
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'
    implementation 'com.alibaba.fastjson2:fastjson2:2.0.53'
}

不要引入 lombok;Android SDK 的 AAR 已经经 Lombok 处理并包含标注好的 .class,业务侧无需再依赖 Lombok。

AndroidManifest 权限

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <!-- 遥操场景需要(麦克风采集) -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>
  • RECORD_AUDIO 是危险权限,需要在 Activity 中运行时申请:ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQ).
  • 如果需要与后端 HTTP 接口(如拉流授权的 authCode / password 换取)交互,network_security_config.xml 里请确认 HTTPS 域是允许的;如果是内网 HTTP,需要显式加 cleartextTrafficPermitted="true" 的域名白名单。

完整接入代码(遥操最小 Activity)

java
public class TeleopActivity extends AppCompatActivity {

    private AgentSdk agentSdk;
    private TeleopRequest teleopRequest;
    private final Handler ui = new Handler(Looper.getMainLooper());

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_teleop);

        String url       = "wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk";
        String appId     = "<灵心开放平台应用 appId>";
        String appKey    = "<灵心开放平台应用 appKey>";
        String appSecret = "<灵心开放平台应用 appSecret>";
        String agentId   = "<目标机器人 agentId>";

        agentSdk = AgentSdk.create(url, appId, appKey, appSecret);
        agentSdk.registerAuth(new AgentAuthCallback() {
            @Override
            public void onAuthState(String appId, int code, String msg) {
                ui.post(() -> {
                    // code == 0 之后再点 UI 上的「进入」按钮
                });
            }
        });
        agentSdk.initialize();

        String teleopId = IdGenerator.generateTeleopId();
        teleopRequest = new TeleopRequest(agentSdk, agentId, teleopId);
        agentSdk.registerTeleop(teleopRequest);
    }

    @Override
    protected void onDestroy() {
        if (agentSdk != null) {
            agentSdk.release(); // 会连带清理 teleopRequest
        }
        super.onDestroy();
    }
}

遥操音频推流、TRRO 视频拉流的完整代码见 超视距遥操指南。

进程内单例注意事项

AgentSdk.create(...) 每次都会返回新实例;如果 App 多个 Activity/Service 都需要 SDK,请自行做单例管理(例如放到 Application 或共享 ViewModel)。同一进程内不建议同时创建多个 AgentSdk 实例:底层 LinkskyClient 各自维护 WebSocket 连接,会造成心跳与鉴权冲突。

常见问题

  • AgentSdk 类找不到:检查 dependencyResolutionManagement 里是否加了 Artifactory Snapshot 仓库;Snapshot 版本必须走 -SNAPSHOT 的仓库地址。
  • java.lang.NoClassDefFoundError: java.time.Instant:minSdk < 26 时才会出现。要么把 minSdk 提到 26,要么保证 coreLibraryDesugaringEnabled = true + coreLibraryDesugaring desugar_jdk_libs:2.0.4.
  • Netty 类冲突:Android SDK 内部没有使用 Netty(Java SDK 才用 Netty;Android 侧改用 OkHttp);如果冲突提示来自其他依赖,请把冲突方 exclude。