快速开始 · Android
快速开始 · Android
5 分钟接入 Android SDK。已经熟悉 Java SDK 快速开始 的同学可以直接跳到 Gradle 引入 + Android 权限。
环境要求
| 项 | 要求 |
|---|---|
| Android Studio | Ladybug 或更新 |
| Android Gradle Plugin | 8.7+ |
| Gradle | 8.9+ |
| JDK | 17(构建期) |
minSdk | 26(Android 8.0) |
compileSdk / targetSdk | 36 |
| 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。