三国卡牌客户端基础资源仓库
hch
2026-10-08 bf4399e9c84c4af1d0382098dab7d54a1e25eb38
0312 星玩抖音代码裁剪,避免打包问题
1个文件已修改
35 ■■■■■ 已修改文件
Assets/Launch/SDK/XingwanTTSDK.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/SDK/XingwanTTSDK.cs
@@ -11,10 +11,14 @@
//   热更侧 SDKDouyinImpl 只做普通方法调用,等同于 DouyinPlatform 调 TT.InitSDK。
//
//
// 【不做平台宏裁剪】整个类始终编译(含 Editor)。
//   Editor 下 SDKDouyinImpl 仍会引用本类(SyncType / Enabled 等),裁掉会编译失败;
//   是否真的调 JS 由 Enabled(内含 IsJsRuntime)运行时判断,Editor 下天然为 false,
//   不会触及任何 extern,因此 DllImport 声明在 Editor 下无害。
// 【整个类始终编译,但 P/Invoke 必须按平台裁剪】
//   SDKDouyinImpl 在所有平台(含 Editor)都会引用本类(SyncType / Enabled 等),
//   所以类本身不能整体裁掉,是否真的调 JS 由 Enabled(内含 IsJsRuntime)运行时判断。
//   但 DllImport("__Internal") 的 extern 只能存在于 WebGL:jslib 是 JS 层,
//   Unity 只把它编进 WebGL 产物;其它平台 IL2CPP 仍会为 extern 生成对
//   Xingwan_* 原生符号的引用,链接期找不到实现,于是 iOS 报
//   "Undefined symbol: _Xingwan_Init" 等 5 个错误。
//   故 extern 用 #if UNITY_WEBGL 包住,其余平台提供同签名托管桩。
// ============================================================================
using System;
@@ -82,9 +86,10 @@
    }
    // ================================================================
    // jslib 声明:Assets/Plugins/Xingwan/XingwanTTGameSdk.jslib
    // jslib 声明:Assets/Plugins/Xingwan/XingwanTTGameSdk.jslib(仅 WebGL)
    // ================================================================
#if UNITY_WEBGL && !UNITY_EDITOR
    [DllImport("__Internal")]
    private static extern void Xingwan_Init(string accessKeyId, string clientKeySecret, XingwanStringCallback cb);
@@ -99,6 +104,26 @@
    [DllImport("__Internal")]
    private static extern int Xingwan_IsReady();
#else
    // 非 WebGL(Editor / iOS / Android …):没有 jslib,用同签名托管桩替代 extern。
    // 少了它,IL2CPP 会生成对 Xingwan_* 原生符号的引用,链接期报 Undefined symbol。
    // 正常流程走不到这里(Enabled / IsJsRuntime 已按运行时平台拦截);万一走到了,
    // 调用点自带的 try/catch 会把异常转成 Fail 结果,不会卡到超时。
    private static void Xingwan_Init(string accessKeyId, string clientKeySecret, XingwanStringCallback cb)
        => throw new NotSupportedException("星玩 SDK 仅支持 WebGL");
    private static void Xingwan_Login(XingwanStringCallback cb)
        => throw new NotSupportedException("星玩 SDK 仅支持 WebGL");
    private static void Xingwan_Pay(string payJson, XingwanStringCallback cb)
        => throw new NotSupportedException("星玩 SDK 仅支持 WebGL");
    private static void Xingwan_SyncData(string syncJson, XingwanStringCallback cb)
        => throw new NotSupportedException("星玩 SDK 仅支持 WebGL");
    private static int Xingwan_IsReady()
        => throw new NotSupportedException("星玩 SDK 仅支持 WebGL");
#endif
    // ================================================================
    // 反向 P/Invoke 包装:IL2CPP 为这些静态方法生成函数指针,jslib 才能 dynCall 回来