快速开始

获取SDK

  1. 获取SDK包,解压后,目录结构如下:
sdk
|
├── test
│   ├── 自测文档
|   └── common-resource 角标\闪屏 etc
├── docs
│   ├── pdf
│   └── html
├── demo
│   ├── android_studio
|   └── demo.apk
└── sdk
    └── aar
        ├── yofunlibrary-xxxxxxxx.aar
        └── channellibrary-xxxxx.aar

其中:

  • test 下是SDK的测试用例、角标、闪屏等资源
  • docs 下是SDK中文说明文档。
  • demo 提供了SDK接入的示例程序。
  • 适用于Android Studio开发接入, SDK提供了 aar MAVEN 的两种形式的资源,详情见 引入依赖 章节。

角标与闪屏

角标资源在(以相关联系人提供的为准) 应用角标规范

test/common-resource/ic_launcher_cover

闪屏资源在 闪屏要求

R.layout.netease_yofun_splash_activity_layout

体验demo

SDK提供了demo工程,给接入SDK做了一个示例,为了更好接入,建议先导入demo项目,体验并查看demo中的接入示例。

  1. 使用 android studio 打开位于 sdk/demo/android_studio/HubDemo 的项目。
  2. 修改 app/build.gradle ,在 app_id 处替换成 网易Yofun 提供的游戏参数。
manifestPlaceholders = [
    "app_id": "${这里替换为从网易Yofun获取的APP_ID}"
]
  1. 直接编译 运行即可。
  2. 如果出现报错, android studio: File -> settings -> Build,Execution,Deploy.. -> Gradle -> Gradle JDK,选中 ‘JDK11’ or ‘JDK8’。

Step by step的接入说明

1. 设置minSdkVersion/applicationId/targetSdkVersion

  • 确保 minSdkVersion 要大于等于 17
  • applicationId 需为游戏的 PackageName(包名);
  • targetSdkVersion 目前最高支持到 34

build.gradle

android {
    defaultConfig {
        applicationId "${PackageName}"
        minSdkVersion 17
        targetSdkVersion 34
    }
}

2. 引入依赖

maven方式引入本地文件方式引入 两种方式都可以,推荐使用 纯maven方式 引入。

2.1 maven方式引入

使用部分本地文件方式引入 忽略本小节

  • 工程根路径下 build.gradle 文件中添加仓库
allprojects {
    repositories {
        maven {url "https://maven-release.webapp.163.com/repository/maven-releases/"}
    }
}
  • 更新依赖文件 app/build.gradle
// 【推荐】方式1:不需要拷贝 aar 等资源
def channel_version="channel_2_0_0"
def maven_url='https://maven-release.webapp.163.com/repository/maven-releases/com/netease/yofun/'+channel_version+'/maven-metadata.xml'
def yofun_version = new XmlSlurper().parse(maven_url).versioning.release
dependencies {
    implementation "com.netease.yofun:${channel_version}:${yofun_version}"

    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:multidex:1.0.3'
}

2.2 【不推荐】本地文件方式引入

使用纯maven方式引入 忽略本小节

  • 工程根路径下 build.gradle 文件中添加仓库
allprojects {
    repositories {
        maven {url "https://maven-release.webapp.163.com/repository/maven-releases/"}
    }
}
  • 将 sdk/aar 目录下的 aar包 yofunlibrary-xxxxxxxx.aar channellibrary-xxxxx.aar 拷贝到项目主模块的app/libs目录下.
// 方式2: 需要拷贝两个 aar 到 libs 目录
repositories { flatDir { dirs 'libs' } }
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.aar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation "com.mumu.services:mumulibrary:${mumulibrary_version}"
    // gradle.properties 文件中定义了 mumulibrary_version=xxx
}

3. 添加填入网易Yofun提供的游戏参数

  • app/build.gradle 中填入网易Yofun提供的游戏参数。
manifestPlaceholders = [
    "app_id": "${这里替换为从网易Yofun获取的APP_ID}"
]
  • app/AndroidManifest.xml 配置YOFUN_APP_ID。
<application>
    ...
    <meta-data
            android:name="YOFUN_APP_ID"
            android:value="${app_id}" />
</application>

4. 参考接口文档进行接入

参考 接口文档

5. 支付相关的包名可见性配置规则

注意到 targetSdkVersion >= 30,需要配置 queries 才可以访问外部应用,SDK中已有对微信和支付宝的配置,用途是发起支付时需要使用。

<manifest package="com.example.app">
...
    <queries>
        <package android:name="com.tencent.mm" />
        <package android:name="com.eg.android.AlipayGphone" />
    </queries>
...
</manifest>

如果出现编译错误,需要开发者检查编译工具,具体要求如下:

  • Android Studio 需要升级至 3.3 及以上,建议升级至 4.0 及以上版本;
  • Android SDK Build-Tools 需要升级至 30 及以上版本;
  • com.android.tools.build:gradle 需要升级至 3.6.0 版本,建议升级至 3.6.4 版本及以上。

6. 混淆(proguard)规则

如果游戏需要混淆SDK,请加入以下混淆规则:

# yofun
-keep class com.netease.yofun.external.**{*;}
-keep class com.netease.yofun.network.ServerUrl {*;}
-keep class com.netease.yofun.network.request.** {*;}
-keep class com.netease.yofun.network.annotation.** {*;}
-keep class com.netease.yofun.network.data.**{ *; }
-keep class com.netease.yofun.wrapper.**{ *; }
-keep class android.support.**{ *; }

# mumusdk
-keep class com.mumu.services.** {*;}
-dontwarn com.mumu.services.external.**
-keep class android.support.** {*;}

# wechatpay
-keep class com.tencent.a.** { *; }
-keep class com.tencent.mm.** { *; }
-keep class com.tencent.wxop.** { *; }
-keep class com.tencent.mobileqq.openpay.** { *; }

# alipay
-dontwarn com.alipay.**
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.ta.**
-keep class com.ut.**
-keep class org.json.alipay.**

# sensorsdata
-dontwarn com.universal.sensorsdata.analytics.android.**
-keep class com.universal.sensorsdata.analytics.android.** {
*;
}