You need to enable JavaScript to run this app.
导航
Android
最近更新时间:2025.01.20 15:23:37首次发布时间:2022.01.19 10:44:44

本章节为您介绍如何集成云游戏 SDK。

环境要求

  • 支持 Android 4.3(Android-19+)及以上系统的真机设备,支持 armeabi-v7a
  • IDE:Android Studio(推荐使用最新版本)
  • 搭建 Java 环境,使用 Java 作为开发语言,JDK 版本需要1.8+

添加 Maven 仓库地址

  1. 在 Project 根目录下的 build.gradle 文件中的 repositories 中配置 maven 仓库地址,参考以下示例:
buildscript {
    repositories {
        maven {
            url 'https://artifact.bytedance.com/repository/Volcengine/'
        }
    }
}

allprojects {
    repositories {
        maven {
            url 'https://artifact.bytedance.com/repository/Volcengine/'
        }
    }
}
  1. 在项目中引入 veGameSDK:
  • (方式一)解压下载的 veGameSDK 包文件,将 cloudgame-release.aar 文件拷贝到 libs 目录下。在应用模块的 build.gradle 文件中的 dependencies 中加入:
repositories {
   flatDir {dirs 'libs'}
}
dependencies {
   implementation fileTree(include: ['*.jar'], dir: 'libs')
   // 云游戏 SDK
   implementation files('libs/cloudgame-release.aar')
   implementation 'androidx.annotation:annotation:1.1.0'
   // 选择引用以下三种框架中的任意一种
   implementation 'com.google.code.gson:gson:2.8.5'
   implementation 'com.alibaba:fastjson:1.1.72.android'
   implementation 'com.fasterxml.jackson.core:jackson-databind:2.7.0'
   implementation 'com.fasterxml.jackson.core:jackson-core:2.7.0'
}
  • (方式二)在应用模块的 build.gradle 文件中的 dependencies 中添加 veGameSDK 的依赖,参考以下示例:
implementation 'com.volcengine.vegame:vegame:1.47.7'
  • (方式三,非必须)在应用模块的 build.gradle 文件中的 dependencies 中添加 veGameSDK 以及插件包的依赖,参考以下示例:
implementation 'com.volcengine.vegame:vegame:1.47.7'
implementation 'com.volcengine.vegame:core-full:1.47.7'
  1. 设置 Java 版本到1.8,参考以下示例:
android {
    // ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
  1. 引用依赖注意事项:
  • 如果依赖了以下模块,则需要注意 Duplicate Class 等相关的编译错误:
org.java-websocket:Java-WebSocket:x.x.x
  • 如果依赖了 3.37.0 或以上版本的 VolcEngineRTC 模块,则在使用 RTCVideo.startVideoCapture 接口时,需要引入 Kotlin 依赖。

权限声明

根据实际场景在 AndroidManifest.xml 文件中声明 SDK 需要的权限,参考以下示例:

//网络权限,使用场景:音视频传输等
<uses-permission android:name="android.permission.INTERNET" />

//WiFi网络状态,使用场景:用户手机网络状态变化监听
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

//设置播放模式的权限:外放 / 听筒
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

//同步定位信息,使用场景:当有些游戏需要获取用户的地理位置时,我们需要获取用户的地理位置信息
//并传送给远端Pod
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

//读写存储
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

说明:

  1. 存储写入权限需动态申请。参考:https://developer.android.com/training/permissions/requesting
  2. 如果 App 指向 Android 10 以上 (targetSdkVersion >= 29),而且还未适配 “Scoped Storage”。请将 AndroidManifest.xml 中的 requestLegacyExternalStorage 设置为 true。参考: https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
<manifest>
<application android:requestLegacyExternalStorage="true">
</application>
</manifest>

快速开始

鉴权相关

  1. 在接入云游戏 SDK 之前,需要获取火山引擎账号对应的原始 Access Key ID(ak)和 Secret Access Key(sk),用于生成临时鉴权密钥(登录火山引擎控制台后,点击页面右上角用户信息,选择 账号 > API访问密钥)。

  2. 调用 签发临时 Token 接口,获取用于鉴权的临时密钥(ak、sk 和 token 的获取方式,参考 快速入门)。

  3. 获取到临时鉴权密钥之后,将其填入 配置 GamePlayConfig 中的对应位置。

  4. app/src/main/AndroidManifest.xml 文件的 meta-data 中填入注册的火山引擎用户账号(可通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取)。参考以下示例:

<meta-data
    android:name="VOLC_ACCOUNT_ID"
    android:value="21000xxxxx" />

初始化 VeGameEngine

调用 init 接口,初始化 VeGameEngine:

VeGameEngine.getInstance().init();

配置 GamePlayConfig

配置启动游戏需要的参数:

GamePlayConfig.Builder builder = new GamePlayConfig.Builder();

builder.userId(userId) // 自定义客户端用户 ID
    .ak(ak) // 必填参数,临时鉴权 ak
    .sk(sk)  // 必填参数,临时鉴权 sk
    .token(token) // 必填参数,临时鉴权 token
    .container(mContainer) // 必填参数,用来承载画面的 Container, 参数说明: layout 需要是 FrameLayout 或者 FrameLayout 的子类
    .roundId(intent.getStringExtra(KEY_ROUND_ID)) // 必填参数,自定义游戏生命周期标识
    .videoStreamProfileId(intent.getIntExtra(KEY_ClARITY_ID, 1)) // 选填参数,清晰度档位
    .gameId(intent.getStringExtra(KEY_PARAM_GAME_ID)) // 必填参数, 游戏 ID
    .enableAcceleratorSensor(false) // 打开加速度传感器开关
    .enableGravitySensor(false) // 打开重力传感器开关
    .enableGyroscopeSensor(false) // 打开陀螺仪开关
    .enableMagneticSensor(false) // 打开磁力传感器开关
    .enableOrientationSensor(false) // 打开方向传感器开关
    .enableVibrator(false) // 打开本地振动开关
    .enableLocationService(true) // 打开本地定位功能开关
    .enableLocalKeyboard(true) // 打开本地键盘开关
    .enableFileChannel(true) // 打开文件通道开关
    .streamListener(IStreamListener streamListener); // 获取音视频流信息回调监听

GamePlayConfig gamePlayConfig = builder.build();

开始游戏

调用 start 接口,启动游戏:

veGameEngine.start(gamePlayConfig, IGamePlayerListener playerListener);