更新日期:2025-12-04Unreal Engine(Android)接入文档
Gradle 及 Android SDK 均为Android Studio创建项目后的默认版本
建议:上述工具及环境配置或安装时一律使用其推荐的默认路径
方式1:
找到当前UnrealEditor默认安装目录:
/Users/Shared/Epic Games/UE_5.5/Engine/Build/Android/Java/src/com/epicgames/unreal
使用Rider或者VScode 打开UnrealEditor对应的项目,选择文件系统展示项目目录层级:

GameApplication.java.template:https://ai.feishu.cn/wiki/R3JGw0Ji9iosOlkcogncs4eenRh
SplashActivity.java:https://ai.feishu.cn/wiki/HAdvwY2x9ipbyVkzmJ8cNaN4nRe

下载QuickSDK_UPL.xml 文件:https://ai.feishu.cn/wiki/ZAgvwXYUeim5n9kCEYjc9mkYnme
4.1 注册插入gradle配置
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) }
4.2 注册插入SDK资源依赖
4.3 GameActivity Import
import com.quicksdk.BaseCallBack; import com.quicksdk.Extend; import com.quicksdk.FuncType; import com.quicksdk.QuickSDK; import com.quicksdk.Sdk; import com.quicksdk.User; import com.quicksdk.entity.GameRoleInfo; import com.quicksdk.entity.OrderInfo; import com.quicksdk.entity.UserInfo; import com.quicksdk.notifier.ExitNotifier; import com.quicksdk.notifier.InitNotifier; import com.quicksdk.notifier.LoginNotifier; import com.quicksdk.notifier.LogoutNotifier; import com.quicksdk.notifier.PayNotifier; import com.quicksdk.notifier.SwitchAccountNotifier; import com.quicksdk.utility.AppConfig; import org.json.JSONObject; import android.util.Log;
4.4 插入sdk生命周期函数
// 在这里添加 onStart 方法的代码 com.quicksdk.Sdk.getInstance().onStart(com.epicgames.unreal.GameActivity.this); com.quicksdk.Sdk.getInstance().onStop(com.epicgames.unreal.GameActivity.this); com.quicksdk.Sdk.getInstance().onDestroy(com.epicgames.unreal.GameActivity.this); com.quicksdk.Sdk.getInstance().onRestart(com.epicgames.unreal.GameActivity.this); com.quicksdk.Sdk.getInstance().onResume(com.epicgames.unreal.GameActivity.this); com.quicksdk.Sdk.getInstance().onPause(com.epicgames.unreal.GameActivity.this); // 在这里添加 onCreate 方法的代码 com.quicksdk.Sdk.getInstance().onCreate(com.epicgames.unreal.GameActivity.this); initNotifier(); // 在这里添加 onCreate 方法的代码 com.quicksdk.Sdk.getInstance().onNewIntent(newIntent); // 在这里添加 onCreate 方法的代码 com.quicksdk.Sdk.getInstance().onActivityResult(com.epicgames.unreal.GameActivity.this, requestCode, resultCode, data);
4.5 插入SDK(必接接口)
SDK必接接口包含初始化 登陆 支付 注销 角色投递 退出 等接口 以及注册对应的回调
详细接口及回调逻辑 参照QuickSDK JAVA 对接文档,这里不过多赘述
/** * 暂定处理各种回调 JAVA==>C++ * @param msg json 类型 String */ public native void onMessageToUnreal( String msg); /** * 隐私协议窗口 */ public void showPrivace(){ com.epicgames.unreal.GameActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Sdk.getInstance().showPrivace( com.epicgames.unreal.GameActivity.this, new BaseCallBack() { @Override public void onSuccess(Object... objects) { try{ JSONObject data=new JSONObject(); data.put("event","privaceAgree"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util. Log.e("quicksdk","showPrivace ex: "+e.toString()); } } @Override public void onFailed(Object... objects) { try{ JSONObject data=new JSONObject(); data.put("event","privaceDisagree"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util. Log.e("quicksdk","showPrivace dis ex: "+e.toString()); } } }); } }); } /** * 初始化 */ public void init() { com.epicgames.unreal.GameActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Sdk.getInstance().init(com.epicgames.unreal.GameActivity.this,"88049844578484520615487574815873","82414864"); } }); } /** * 登录 */ public void login() { com.epicgames.unreal.GameActivity.this.runOnUiThread(new Runnable() { @Override public void run() { User.getInstance().login(com.epicgames.unreal.GameActivity.this); } }); } /** * 注销 */ public void logout() { com.epicgames.unreal.GameActivity.this.runOnUiThread(new Runnable() { @Override public void run() { User.getInstance().logout(com.epicgames.unreal.GameActivity.this); } }); } /** * 退出 */ public void exit() { com.epicgames.unreal.GameActivity.this.runOnUiThread(new Runnable() { @Override public void run() { if (QuickSDK.getInstance().isShowExitDialog()) { // 游戏不能调用自身的退出对话框 Sdk.getInstance().exit(com.epicgames.unreal.GameActivity.this); } else { // 游戏调用自身的退出对话框,点击确定后,调用sdk的exit Sdk.getInstance().exit(com.epicgames.unreal.GameActivity.this); } } }); } public void initNotifier() { try{ QuickSDK.getInstance() // 1.设置横竖屏,游戏横屏为true,游戏竖屏为false .setIsLandScape(true) // 3.设置初始化通知 .setInitNotifier(new InitNotifier() { @Override public void onSuccess() { try{ JSONObject data=new JSONObject(); data.put("event","initSuccessed"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util. Log.e("quicksdk","init notifier ex: "+e.toString()); } } @Override public void onFailed(String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","initFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util. Log.e("quicksdk","init notifier ex: "+e.toString()); } } }) // 4.设置登录通知 .setLoginNotifier(new LoginNotifier() { @Override public void onSuccess(UserInfo userInfo) { try{ JSONObject data=new JSONObject(); data.put("event","loginSuccessed"); JSONObject extraData=new JSONObject(); extraData.put("uid",userInfo.getUID()); extraData.put("username",userInfo.getUserName()); extraData.put("token", userInfo.getToken()); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","login notifier ex: "+e.toString()); } } @Override public void onCancel() { try{ JSONObject data=new JSONObject(); data.put("event","loginCancel"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","login notifier ex: "+e.toString()); } } @Override public void onFailed(final String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","loginFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","login notifier ex: "+e.toString()); } } }) // 5.设置注销通知 .setLogoutNotifier(new LogoutNotifier() { @Override public void onSuccess() { try{ JSONObject data=new JSONObject(); data.put("event","logoutSuccessed"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","logout notifier ex: "+e.toString()); } } @Override public void onFailed(String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","logoutFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","logout notifier ex: "+e.toString()); } } }) // 6.设置支付通知 .setPayNotifier(new PayNotifier() { @Override public void onSuccess(String sdkOrderID, String cpOrderID, String extrasParams) { try{ JSONObject data=new JSONObject(); data.put("event","paySuccessed"); JSONObject extraData=new JSONObject(); extraData.put("sdkOrderId",sdkOrderID); extraData.put("cpOrderId",cpOrderID); extraData.put("extraParams",extrasParams); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","pay notifier ex: "+e.toString()); } } @Override public void onCancel(String cpOrderID) { try{ JSONObject data=new JSONObject(); data.put("event","payCancel"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","pay notifier ex: "+e.toString()); } } @Override public void onFailed(String cpOrderID, String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","payFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","pay notifier ex: "+e.toString()); } } }) // 7.设置退出通知 .setExitNotifier(new ExitNotifier() { @Override public void onSuccess() { finish(); System.exit(0); } @Override public void onFailed(String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","exitFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","exit notifier ex: "+e.toString()); } } }); QuickSDK.getInstance().setSwitchAccountNotifier(new SwitchAccountNotifier() { @Override public void onSuccess(UserInfo userInfo) { try{ JSONObject data=new JSONObject(); data.put("event","switchAccountSuccessed"); JSONObject extraData=new JSONObject(); extraData.put("uid",userInfo.getUID()); extraData.put("username",userInfo.getUserName()); extraData.put("token", userInfo.getToken()); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","switch notifier ex: "+e.toString()); } } @Override public void onFailed(String message, String trace) { try{ JSONObject data=new JSONObject(); data.put("event","switchAccountFailed"); JSONObject extraData=new JSONObject(); extraData.put("id",trace); extraData.put("msg",message); data.put("result",extraData); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","switch notifier ex: "+e.toString()); } } @Override public void onCancel() { try{ JSONObject data=new JSONObject(); data.put("event","switchAccountCancel"); data.put("result",""); onMessageToUnreal(data.toString()); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","switch notifier ex: "+e.toString()); } } }); }catch (Exception e){ e.printStackTrace(); android.util.Log.e("quicksdk","initNotifier ex: "+e.toString()); } }
在插件目录/XXXX.Build.cs 文件内插入
//判断平台为Android
if (Target.Platform == UnrealTargetPlatform.Android)
{
//Android/Java c++封装库
PublicDependencyModuleNames.Add("Launch");
PublicDependencyModuleNames.Add("ApplicationCore");
//配置依赖之前创建的UPL文件
AdditionalPropertiesForReceipt.Add("AndroidPlugin", Path.Combine(ModuleDirectory, "QuickSDK_UPL.xml"));
}
在公共依赖中添加unreal官方Json库
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core","Json","JsonUtilities"
// ... add other public dependencies that you statically link with here ...
}
);
在主项目目录/XXXX.Build.cs 文件内插入对插件的依赖配置
PrivateDependencyModuleNames.AddRange(new string[] { "QuickSDK_Android"});
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538