# 安装
各端制品的坐标,仓库地址与版本固定方式,制品仓库匿名只读。
来源:https://open.shengzhiai.com/sdk/v2/installation/
## 制品与仓库
全部制品发布在 `open.shengzhiai.com`,仓库匿名只读,不需要账号,令牌与证书。已发布的版本不再改动,依赖写成具体版本号即可锁定。
| 端 | 制品 | 仓库 |
|---|---|---|
| 服务端 Java | `com.shengzhiai.yugu:yugu-java-sdk:2.1.0` | Maven `https://open.shengzhiai.com/maven/` |
| 安卓 | `com.shengzhiai.yugu:yugu-android-sdk:2.1.0` | 同上 |
| 安卓声通平替 | `com.shengzhiai.yugu:stkouyu-compat:2.1.2` | 同上 |
| 网页 | `@shengzhiai/yugu-web-sdk@2.1.0` | npm `https://open.shengzhiai.com/npm/` |
| 微信小程序 | `@shengzhiai/yugu-miniprogram-sdk@2.1.0` | 同上 |
| iOS | 包 `yugu-ios-sdk`,产品 `YuguSDK`,标签 `2.1.0` | SwiftPM `https://open.shengzhiai.com/git/yugu-ios-sdk.git` |
| iOS 声通平替 | 包 `stkouyu-ios-compat`,模块 `STKouyuEngine`,标签 `2.1.2` | SwiftPM `https://open.shengzhiai.com/git/stkouyu-ios-compat.git` |
## 添加依赖
### 服务端 Java
Maven,pom.xml:
```xml
shengzhiai
https://open.shengzhiai.com/maven/
com.shengzhiai.yugu
yugu-java-sdk
2.1.0
```
Gradle,build.gradle:
```groovy
repositories {
mavenCentral()
maven { url 'https://open.shengzhiai.com/maven/' }
}
dependencies {
implementation 'com.shengzhiai.yugu:yugu-java-sdk:2.1.0'
}
```
Gradle Kotlin,build.gradle.kts:
```kotlin
repositories {
mavenCentral()
maven("https://open.shengzhiai.com/maven/")
}
dependencies {
implementation("com.shengzhiai.yugu:yugu-java-sdk:2.1.0")
}
```
运行时依赖只有 `jackson-databind` `2.17`,从 Maven Central 获取,HTTP 与 WebSocket 使用 JDK 自带的 `java.net.http`。
### 安卓
Gradle:
```groovy
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url "https://open.shengzhiai.com/maven/" }
}
}
dependencies {
implementation "com.shengzhiai.yugu:yugu-android-sdk:2.1.0"
}
```
Gradle Kotlin:
```kotlin
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url = uri("https://open.shengzhiai.com/maven/") }
}
}
// app/build.gradle.kts
dependencies {
implementation("com.shengzhiai.yugu:yugu-android-sdk:2.1.0")
}
```
第一段写在 `settings.gradle`,第二段写在模块的 `build.gradle`。工程仍在顶层 `build.gradle` 的 `allprojects` 里声明仓库时,把同一行仓库地址加进那里。SDK 自带 R8 混淆保留规则,录音需要的 `RECORD_AUDIO` 权限见[安卓 SDK](https://open.shengzhiai.com/sdk/v2/sdks/android/#权限)。
### iOS
SwiftPM,Package.swift:
```swift
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "MyApp",
platforms: [.iOS(.v13)],
dependencies: [
.package(url: "https://open.shengzhiai.com/git/yugu-ios-sdk.git", from: "2.1.0"),
],
targets: [
.target(name: "MyApp", dependencies: [
.product(name: "YuguSDK", package: "yugu-ios-sdk"),
]),
]
)
```
CocoaPods,Podfile:
```ruby
pod 'YuguSDK', :git => 'https://open.shengzhiai.com/git/yugu-ios-sdk.git', :tag => '2.1.0'
```
Xcode 里选择 File 菜单的 Add Package Dependencies,输入仓库地址,Dependency Rule 选择 Up to Next Major Version,版本填 `2.1.0`,产品勾选 `YuguSDK`。录音需要在 `Info.plist` 声明 `NSMicrophoneUsageDescription`。
### 网页
npm:
```bash
@shengzhiai:registry=https://open.shengzhiai.com/npm/
npm install @shengzhiai/yugu-web-sdk@2.1.0
```
script 标签:
```html
```
第一行写进项目根目录的 `.npmrc`。`pnpm` 与 Yarn 1 读取同一个 `.npmrc`,Yarn 2 及以上版本在 `.yarnrc.yml` 的 `npmScopes` 里配置同一个地址。包同时提供 ESM 构建与 UMD 构建,`package.json` 的 `exports` 按导入方式自动选择。
### 微信小程序
```bash
echo "@shengzhiai:registry=https://open.shengzhiai.com/npm/" >> .npmrc
npm install @shengzhiai/yugu-miniprogram-sdk@2.1.0
```
安装后在微信开发者工具里选择工具菜单的构建 npm,评测与实时评测的域名要登记为合法域名,见[小程序 SDK](https://open.shengzhiai.com/sdk/v2/sdks/miniprogram/#合法域名)。
### 声通平替
已接入声通 SDK 的工程只换依赖,不改业务代码,删除声通文件与替换依赖的步骤见[从声通迁移](https://open.shengzhiai.com/sdk/v2/migrate/shengtong/)。
## 版本固定与校验
| 仓库 | 锁定版本 | 校验 |
|---|---|---|
| Maven | 依赖写成具体版本号 | 每个文件附带 `.md5`,`.sha1`,`.sha256`,`.sha512`,另有 `-sources.jar` 与 `-javadoc.jar` |
| npm | `npm install` 写入 `package-lock.json` | 包元数据带 `sha512` 完整性值,npm 安装时自动核对 |
| SwiftPM | 每个版本对应一个 Git 标签,`exact: "2.1.0"` 固定 | `Package.resolved` 记录标签对应的提交 |
回退时把版本号改回历史版本。`1.x` 版本没有发布到制品仓库,已停止维护,升级方法见[升级到 2.0](https://open.shengzhiai.com/sdk/v2/migrate/v2/)。