Skip to content

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);

}

版权所有© 2021-2030 上海丞诺网络科技有限公司