Skip to content

preLoadGameByDirectoryPath

预加载游戏(通过本地目录路径)

preLoadGameByDirectoryPath 方法允许开发者指定一个已解压的游戏资源目录进行预加载。该接口直接读取本地文件系统中的原始资源文件,跳过了下载和解压过程,是所有预加载方式中速度最快的一种。

此方法通常用于开发者调试、内置资源分发(将游戏包预置在 Assets/私有目录中并解压),或业务侧已完成资源解压管理的场景。


方法声明

java
/**
 * 预加载游戏,根据游戏目录
 *
 * @param directoryPath     游戏本地目录
 * @param params            参数对象
 * @param listener          预加载状态监听器
 * @return SUDOPGameTask 任务句柄,可用于管理或销毁预加载任务
 */
public static SUDOPGameTask preLoadGameByDirectoryPath(String directoryPath, SUDOPGamePackageParams params, SUDOPPreLoadGameListener listener);

参数说明

用于指定本地资源目录的位置:

属性类型描述
directoryPathString必填。游戏资源文件夹在设备上的绝对路径(该目录下应包含 app.json 等核心文件)。

1. SUDOPGamePackageParams

用于指定具体的资源下载链接:

属性类型描述
versionString必填。游戏版本
fidString游戏包文件指纹
fidTypeFIDType游戏包文件指纹生成方式
appGameIDString必填。指定gameID
appCPIDString指定游戏开发者的CP ID
appGroupIDString指定游戏开发者的Group ID

2. FIDType

用于指定游戏包文件指纹生成方式

属性类型描述
MD5enumMD5算法
CRC32enumCRC32算法
SHA1enumSHA1算法
SHA256StrenumingSHA256算法

4. SUDOPPreLoadGameListener

用于接收预加载结果的回调接口:

  • void onSuccess(String gameId, SUDRTGameHandle handle):预加载成功。

  • gameId:从目录配置文件中解析出的游戏唯一标识。

  • handle : 游戏实例句柄,可用于后续挂载视图。

  • void onFailure(int retCode, String retMsg):预加载失败。常见原因包括目录路径不存在、缺少核心配置文件、权限不足或内存溢出。


运行行为

  1. 结构扫描:SDK 扫描指定目录,验证是否存在必需的入口文件(如 app.json)及资源子目录。
  2. 环境加载:直接建立文件流映射,启动运行时环境并加载脚本内核。
  3. 资源预读:根据配置预先读取并解析首屏相关的纹理、配置及脚本。
  4. 实例生成:完成所有非 UI 层的初始化逻辑,返回可立即使用的 SUDRTGameHandle

代码示例

java
// 1. 准备本地目录参数
String directoryPath = getFilesDir().getAbsolutePath() + "/extracted_games/game_101/";

// 2. 执行预加载
SUDOPGamePackageParams params = new SUDOPGamePackageParams();
params.version = "gamePkgVersion";
params.fid = "2e7ca170f33629c7baf4dc430c541c43";
params.fidType = FIDType.MD5;
params.appGameID = "appGameID";
params.appCPID = "Game Developer id";
params.appGroupID = "Game developer group id";
SUDOPGameTask preLoadTask = SUDOP.preLoadGameByDirectoryPath(directoryPath, params, new SUDOPPreLoadGameListener() {
    @Override
    public void onSuccess(String gameId, SUDRTGameHandleProvider provider) {
    }
    @Override
    public void onFailure(int retCode, String retMsg) {
    }
});

// 如果 Activity 销毁,记得释放任务
// preLoadTask.destroy();

注意事项

  • 路径合法性:传入的路径必须是目录路径,且必须以斜杠(/)结尾或确保 SDK 能正确识别。
  • 权限管理:确保 App 拥有对该目录的读取权限(Read Access)。
  • 资源更新:由于 SDK 不负责此路径下的资源更新,若业务侧替换了目录内的文件,建议销毁旧任务并重新调用此接口以重新加载。