游戏启动、初始化 SDK 时,SDK会对接入是否正确进行检查。若检查有错,会在 ADB 日志提示;
若游戏还没有发布线上前,也会弹窗提示开发者。
本文档是所有检查错误的详细、全面的说明,主要面向 jar+res 接入方式的开发。
注意:若游戏是二次封装了 SDK 的java 接口,需要在最初封装的环节查看修复这些问题
“SDK 调试开关未关闭”,没有关闭 SDK 的调试开关,即下面setDebugEnabled()
接口参数没有设置false
perateConfig config = new OperateConfig.Builder(MainActivity.this)
// 设置调试模式,可选,默认false, 发布前应设置为false或删除调用
.setDebugEnabled(false)
.build();
若不关闭,则可能会泄漏敏感信息,对游戏运行性能又一定影响
“OpeFileProvider 设置错误”,游戏 APK AndroidManifest.xml
中 cn.m4399.operate.OpeFileProvider
未注册或属性设置有错。游戏外部接口需要访问
SDK 内部资源,本设置就是注册资源的访问权限。
<!--
4399 运营SDK:以下是FileProvider配置,以兼容7.0+文件访问权限变更
注意其中的: android:authorities="游戏包名.operate.FileProvider"
以及,android:resource="@xml/m4399_ope_file_paths" 是固定格式写法
-->
<provider
android:name="cn.m4399.operate.OpeFileProvider"
android:authorities="${applicationId}.operate.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/m4399_ope_file_paths" />
</provider>
此项有错将影响游戏更新、分享等功能;特别是更新异常,将严重影响用户体验,导致用户流失。
其中的 android:authorities
极易出错,请仔细核对。
"Activity 模式设置有误",游戏 Activity
设置有错,主要是 android:resizeableActivity
和 android:configChanges
android:resizeableActivity
,多窗口相关属性,详细说明参考 多窗口模式配置。
对于
SDK,最好禁用禁用多窗口模式,如果必须使用,则要设置 android:configChanges
<!-- 游戏 Activity:
若覆盖了 android:resizeableActivity="false",则必须如下设置 android:configChanges
android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|navigation|smallestScreenSize|fontScale"
不应该使用 android:launchMode="singleTask" 启动模式,可以考虑 singleTop
-->
<activity
android:name="cn.m4399.operate.samples.OnlineGameActivity"
android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|navigationsmallestScreenSize|fontScale"
android:exported="true"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
游戏 Activity
- Android 应用启动打开的第一个 Activity 称为“入口 Activity”
- 游戏画面一般只在一个 Activity 中展示,称为“主 Activity”
- 游戏一般在入口 Activity 或主 Activity 初始化 SDK、登录账号
- 大多数游戏入口 Activity 即是主 Activity,但并非总数如此
游戏一般在主 Activity
或入口 Activity
中初始化
SDK,而多窗口模式中的特定操作会使初始化异常。
未正确设置android:resizeableActivity
和 android:configChanges
,有可能使游戏跳过重要的初始化弹窗。
另外 android:configChanges
设置不正确,会引起其他问题,如授权登录过程异常,授权后无法正确获取用户信息。
若游戏有多个 Activity
,则游戏需要在入口 Activity
和主 Activity
设置上述属性
“必须的 Activity 不全”,SDK 必须的 Activity
组件不全,这些组件对应了不同的页面
当前 SDK v3.14.x
中需要的 Activity
有
// SDK
cn.m4399.operate.component.OperateActivity,
cn.m4399.operate.recharge.RechargeActivity,
// 支付宝 H5
com.alipay.sdk.app.H5PayActivity,
// 一键登录
cn.com.chinatelecom.account.sdk.ui.AuthActivity,
cn.com.chinatelecom.account.sdk.ui.PrivacyWebviewActivity,
cn.m4399.operate.account.onekey.cu.CuLoginActivity,
cn.m4399.operate.account.onekey.cu.CuPrivacyContentActivity,
com.cmic.gen.sdk.view.GenLoginAuthActivity,
// 人脸识别
com.tencent.cloud.huiyansdkface.facelight.ui.FaceVerifyActivity,
com.tencent.cloud.huiyansdkface.facelight.ui.FaceGuideActivity,
com.tencent.cloud.huiyansdkface.facelight.ui.FaceProtocalActivity
请注意:
Activity
可能随着
SDK 版本的不同有所变化,升级 SDK 时应仔细核对Activity
的其他配置也应遵循原有写法,除了方向设置可以与游戏本身一致
“必须的 Service 不全”,SDK 必须的服务组件没有注册
当前 SDK v3.14.x
中需要的 Service
有
<!-- 录屏相关 -->
<service
android:name="cn.m4399.operate.video.record.container.RecordService"
android:foregroundServiceType="mediaProjection" />
上面服务与录屏功能有关(由后台配置开关),高版本系统要求注册前台服务以完成录屏功能。
注意:
Service
可能随着
SDK 版本的不同有所变化,升级 SDK 时应仔细核对Service
的其他配置也应遵循原有写法
“必须的应用权限不全”,SDK 必须的权限不全,其中大多数是第三方 SDK 需要的
<!--
4399 运营SDK:
以下是必须的,包括第三方SDK需要的,以jar+res 方式接入需要打开以下内容,aar则不需
-->
<!-- 一般性权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 兼容低版本系统 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 录屏功能 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 一键登录 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--suppress DeprecatedClassUsageInspection -->
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- 人脸识别 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-sdk tools:overrideLibrary="com.tencent.cloud.huiyansdkface.wecamera" />
注意:
缺少必须的权限会引起各种异常,比如网络请求失败、实名时无法打开相册、无法启动录屏、无法启动摄像头等
“必须的 assets 资源不全”,SDK 运行时需要的资源不全,游戏打包后解压的assets
目录应包含
// SDK 悬浮窗关闭的教学图片
m4399_ope_fab_hide_animation.gif,
// models目录 是人脸识别的数据资源
models
注意:
除了上述必须的、SDK 加入检查的配置/资源,还有一些也是需要的,但没有加入检查
SDK res下为兼容不同屏幕尺寸、方向,和不同系统的资源不应丢失,否则会出现页面变形,严重的会功能异常
游戏打包后,应检查 so 是否完整且对齐,即必须的 so 存在,且任意两个 abi 目录里的 so 一样
SDK 的 x86 缺少部分人脸识别的 so,即模拟器上的人脸识别可能会异常
SDK 依赖的其他jar包,主要是
android-support-v13-23.2.1.jar
volley-v1.2.1.jar
大部分 jar 包都已经打到 SDK 主 jar 包中了,除了上面两个易冲突、由接入方自己控制的除外
<!-- 4399 运营SDK:Android 11兼容,声明所要进行交互的应用包名,主要用于外部授权登录和支付 -->
<queries>
<package android:name="com.m4399.gamecenter" />
<package android:name="com.tencent.mobileqq" />
<package android:name="com.sina.weibo" />
<package android:name="com.tencent.mm" />
<!-- 支付宝 SDK -->
<package android:name="com.eg.android.AlipayGphone" /> <!-- 支付宝 app -->
<package android:name="com.eg.android.AlipayGphoneRC" /> <!-- 沙箱支付宝 app -->
<package android:name="hk.alipay.wallet" /> <!-- 香港版支付宝 app -->
<!-- 好游快爆 -->
<package android:name="com.xmcy.hykb" />
</queries>
缺少影响独代游戏的激活、授权登录、微信/支付宝/QQ 钱包的充值
若编译时出现类似于以下的错误
Missing 'package' key attribute on element package at [cn.m4399.sdk:operate:x.x.x] AndroidManifest.xml
查看 Android studio 项目根目录下的build.gradle
,可能是这样的声明:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
}
此为Gradle
插件兼容问题,参考 Android Gradle 插件 4.0.0(2020 年 4
月),解决方式:
4.1
或更高版本
3.5.3
调整为3.5.4
当前AGP 版本 | 请升级到 |
---|---|
4.0.* | 4.0.1 |
3.6.* | 3.6.4 |
3.5.* | 3.5.4 |
3.4.* | 3.4.3 |
3.3.* | 3.3.3 |
<!--
4399 运营SDK:
Android 9.0 兼容, 对少量外部 http 请求的兼容,
参考或修改配置 android:networkSecurityConfig="@xml/m4399_network_policy"
-->
<application
android:networkSecurityConfig="@xml/m4399_network_policy"
android:resizeableActivity="false">
</application>
缺少无法在 Android 9+ 上进行 http 请求
注意:
<!-- 4399 运营SDK:旧的http请求库的兼容,支付宝等少数外部依赖需要 -->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
缺少导致无法打开支付宝网页