Appearance
Android接入配置
WARNING
在接入SDK之前, 建议先请仔细阅读:接入流程
添加依赖和基础配置
1、添加依赖jar包
将 SDKDemo/libs下面所有jar/aar包放到游戏接入工程中的libs目录下;如果是用androidstudio,请在build.gradle文件中,增加这里所有jar/aar包的依赖。
gradle
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
同时,在游戏工程的build.gradle中,添加如下依赖库:
gradle
// SDK UI组件依赖
implementation 'androidx.fragment:fragment:1.2.0'
// 微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
// 支付宝支付
implementation 'com.alipay.sdk:alipaysdk-android:+@aar'
// 阿里云本机号码一键登录/QQ登录 需要
implementation 'androidx.appcompat:appcompat:1.3.1'
// Tap登录需要
implementation 'com.taptap.sdk:tap-core:4.5.9'
implementation 'com.taptap.sdk:tap-login:4.5.9'
implementation 'com.taptap.sdk:tap-update:4.5.9'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation 'androidx.core:core:1.3.1'
implementation 'com.google.android.flexbox:flexbox:3.0.0'
2、配置AndroidManifest
将以下这段复制并黏贴到游戏出包工程的AndroidManifest.xml中application节点内:
xml
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="com.game.sdk.service.login.weixin.WXEntryActivity" />
<activity-alias
android:name="${applicationId}.wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.game.sdk.service.pay.weixin.app.WXPayEntryActivity" />
如果开启了QQ登录,还需要配置QQ登录相关的AndroidManifest.xml:
xml
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!--注意,这里的${qqAppID}要换成该游戏自己的QQ AppID-->
<data android:scheme="tencent${qqAppID}" />
</intent-filter>
</activity>
3、配置混淆规则
如果SDK库经过了混淆, 那么游戏工程中,请在混淆配置文件中加入如下规则,忽略SDK中的api:
txt
-keep class com.game.sdk.** { *; }
-keep class com.tencent.** { *; }
-keep class com.alipay.** { *; }
-keep class com.tapsdk.** { *; }
-keep class com.taptap.** { *; }
-keep class com.ali.** { *; }
-keep class com.cmic.** { *; }
-keep class com.mobile.auth.** { *; }
-keep class com.unicom.** { *; }
-keep class com.github.** { *; }
-keep class com.reyun.** { *; }
-keep class com.kwai.** { *; }
-keep class com.qq.** { *; }
-keep class com.bytedance.** { *; }
实现Application
1、方案一
如果游戏层没有自己的Application,那么游戏需要将AndroidManifest.xml中的application指定为 com.game.sdk.app.UGApplication。
xml
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="com.game.sdk.app.UGApplication"
android:usesCleartextTraffic="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
</application>
2、方案二
如果游戏有自己的Application, 则可以直接继承com.game.sdk.app.UGApplication类, 比如:
java
public class GameApplication extends UGApplication{
public void onCreate(){
super.onCreate();
}
public void attachBaseContext(Context base){
super.attachBaseContext(base);
}
public void onConfigurationChanged(Configuration config){
super.onConfigurationChanged(config);
}
public void onTerminate(){
super.onTerminate();
}
}
3、方案三
如果游戏自己已经继承了其他Application, 无法再继承UGApplication, 那么可以在游戏的Application中,直接调用XSDK的application接口:
java
public class GameOtherApplication extends Application {
public void onCreate(){
super.onCreate();
UGApplicationWrapper.onCreate(this);
}
public void attachBaseContext(Context base){
super.attachBaseContext(base);
UGApplicationWrapper.onAttachBaseContext(this, base);
}
public void onTerminate(){
super.onTerminate();
UGApplicationWrapper.onTerminate(this);
}
}
生命周期函数
游戏需要在主Activity的生命周期函数中, 调用U8聚合SDK的生命周期函数:
java
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
XPlatform.getInstance().onActivityResult(this, requestCode, resultCode, data);
}
public void onStart() {
super.onStart();
XPlatform.getInstance().onStart(this);
}
public void onPause() {
super.onPause();
XPlatform.getInstance().onPause(this);
}
public void onResume() {
super.onResume();
XPlatform.getInstance().onResume(this);
}
public void onNewIntent(Intent newIntent) {
super.onNewIntent(newIntent);
XPlatform.getInstance().onNewIntent(this, newIntent);
}
public void onStop() {
super.onStop();
XPlatform.getInstance().onStop(this);
}
public void onDestroy() {
super.onDestroy();
XPlatform.getInstance().onDestroy(this);
}
public void onRestart() {
super.onRestart();
XPlatform.getInstance().onRestart(this);
}
public void onBackPressed() {
super.onBackPressed();
XPlatform.getInstance().onBackPressed(this);
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
XPlatform.getInstance().onConfigurationChanged(this, newConfig);
}
public void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
XPlatform.getInstance().attachBaseContext(this, newBase);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
XPlatform.getInstance().onRequestPermissionResult(this, requestCode, permissions, grantResults);
}