初始化
统一应用名称、icon 的引用名
不同渠道对应用名称、icon 的引用名要求不同,所以由 OmniSDK 统一命名定义,需要项目的工程代码进行适配。
引用名 | 功能 | 处理方式 |
---|---|---|
omni_app_name | 应用名字符串 | 将游戏工程代码里原应用名的变量名重命名为 omni_app_name ,同时更改工程内的引用名,或增加 omni_app_name 字符串引用名。 |
omni_ic_launcher | 启动 icon 图片名 | 拷贝一张启动 icon,并命名为 omni_ic_launcher.png ,放在 mipmap-xxhdpi 文件夹下 |
Application 必接
接入方式
为兼容部分渠道配置,统一添加 tools:replace
配置,项目按 IDE 提示增减:
<application
android:name="{replace-your-package-path}.GameApplication"
tools:replace="android:theme,allowBackup">
...
</application>
OmniSDK 支持两种方式接入 Application,因部分聚合渠道有强制要求,建议直接使用第一种方法。
- 方法一:若游戏 无
Application
,或 继承 自android.app.Application
,或有接入部分特殊渠道,则将继承改为OmniApplication
,并增加环境的参数声明:
import com.kingsoft.shiyou.omnisdk.api.OmniApplication;
public class GameApplication extends OmniApplication {
@Override
public void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 游戏发布环境的参数声明的初始化配置
InitParams initParams = new InitParams();
initParams.setDebug(false);
initParams.setEnvironment("Production");
OmniSDK.getInstance().initialize(initParams);
}
}
- 方法二(不建议):若接入的渠道中无特殊渠道,且游戏的
Application
继承了其他 SDK 的Application
子类,则在其中添加如下代码:
@Override
public void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(context); // 64k方法数
OmniSDK.getInstance().onApplicationAttachBaseContext(context)
// 游戏发布环境的参数声明的初始化配置
InitParams initParams = new InitParams();
initParams.setDebug(false);
initParams.setEnvironment("Production");
OmniSDK.getInstance().initialize(initParams);
}
@Override
public void onCreate() {
super.onCreate();
OmniSDK.getInstance().onApplicationCreate(this);
}
@Override
public void onLowMemory() {
super.onLowMemory();
OmniSDK.getInstance().onApplicationLowMemory();
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
OmniSDK.getInstance().onApplicationTrimMemory();
}
@Override
public void onTerminate() {
super.onTerminate();
OmniSDK.getInstance().onApplicationTerminate();
}
特殊渠道列表
渠道名 | 渠道唯一标识 |
---|---|
魅拓 | meituo |
海南澎湃互动 | pphd |
多酷 | duoku |
MuMu | yofun |
游戏狗 | gamedog |
汇智 | huizhi |
熊猫侠 | xmxia |
GameActivity 必接
- 🌟(推荐)方式一:将游戏主 Activity 继承改为
OmniSdk..Activity
,对应关系如下。
public class GameActivity extends OmniSdkActivity { // android.app.Activity
public class GameActivity extends OmniSdkNativeActivity { // android.app.NativeActivity
public class GameActivity extends OmniSdkAppCompatActivity { // androidx.appcompat.app.AppCompatActivity
...
}
或
public class GameActivity extends UnityPlayerActivity {}
public class UnityPlayerActivity extends OmniSdkActivity { // android.app.Activity
public class UnityPlayerActivity extends OmniSdkNativeActivity { // android.app.NativeActivity
public class UnityPlayerActivity extends OmniSdkAppCompatActivity { // androidx.appcompat.app.AppCompatActivity
- 方式二:在游戏主 Activity 添加 OmniSDK 的生命周期方法,即
OmniSdkActivity
里所有的代码。
检查 Activity 节点(必检)
- 检查 AndroidManifest.xml 的 Activity 节点声明,如果引擎未自动生成,需要手动添加,否则初始化或功能会失败
- 检查的标准结构如下:
<application
android:name=".package.GameApplication" // 本行重点
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/Theme.GameTheme"
tools:replace="android:theme">
<activity
android:name=".package.GameActivity" // 本行重点
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:exported="true"
android:screenOrientation="sensor"
android:theme="@style/Theme.GameActivity.Fullscreen">
<intent-filter>
<!-- 主Activity即启动Activity,需要至少声明这两个属性 -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
API 开发(按需)
以上编译集成、初始化等步骤都完成后,就可以按项目需要的功能进行开发了。
API 接口说明
- OmniSDK 接口对线程的调用无要求,游戏调用接口时无需开启新线程。
- 回调时,无需额外切换线程。
- 如处理一些 UI 事件,则需要确保在主线程执行:
- 使用
runOnUiThread
。
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
- 使用
Handler
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
}
});
功能逻辑处理说明
- OmniSDK 秉持只接一次API接口的设计理念,在配合
shiyou
文件夹的多渠道配置后,可一次出多个渠道产物。 - OmniSDK 会提供一些识别性API,比如获取当前渠道名等,方便游戏自定义特定渠道或功能的逻辑,从而游戏不需要为特定功能或渠道拉取特定代码分支,减少代码维护成本。