preLoadGameByDirectoryPath
预加载游戏(通过本地目录路径)
preLoadGameByDirectoryPath 方法允许开发者指定一个已解压的游戏资源目录进行预加载。该接口直接读取本地文件系统中的原始资源文件,跳过了下载和解压过程,是所有预加载方式中速度最快的一种。
此方法通常用于开发者调试、内置资源分发(将游戏包预置在 Assets/私有目录中并解压),或业务侧已完成资源解压管理的场景。
方法声明
java
/**
* 预加载游戏,根据游戏目录
*
* @param directoryPath 游戏本地目录
* @param params 参数对象
* @param listener 预加载状态监听器
* @return SUDOPGameTask 任务句柄,可用于管理或销毁预加载任务
*/
public static SUDOPGameTask preLoadGameByDirectoryPath(String directoryPath, SUDOPGamePackageParams params, SUDOPPreLoadGameListener listener);参数说明
用于指定本地资源目录的位置:
| 属性 | 类型 | 描述 |
|---|---|---|
| directoryPath | String | 必填。游戏资源文件夹在设备上的绝对路径(该目录下应包含 app.json 等核心文件)。 |
1. SUDOPGamePackageParams
用于指定具体的资源下载链接:
| 属性 | 类型 | 描述 |
|---|---|---|
| version | String | 必填。游戏版本 |
| fid | String | 游戏包文件指纹 |
| fidType | FIDType | 游戏包文件指纹生成方式 |
| appGameID | String | 必填。指定gameID |
| appCPID | String | 指定游戏开发者的CP ID |
| appGroupID | String | 指定游戏开发者的Group ID |
2. FIDType
用于指定游戏包文件指纹生成方式
| 属性 | 类型 | 描述 |
|---|---|---|
| MD5 | enum | MD5算法 |
| CRC32 | enum | CRC32算法 |
| SHA1 | enum | SHA1算法 |
| SHA256 | Strenuming | SHA256算法 |
4. SUDOPPreLoadGameListener
用于接收预加载结果的回调接口:
void onSuccess(String gameId, SUDRTGameHandle handle):预加载成功。gameId:从目录配置文件中解析出的游戏唯一标识。handle: 游戏实例句柄,可用于后续挂载视图。void onFailure(int retCode, String retMsg):预加载失败。常见原因包括目录路径不存在、缺少核心配置文件、权限不足或内存溢出。
运行行为
- 结构扫描:SDK 扫描指定目录,验证是否存在必需的入口文件(如
app.json)及资源子目录。 - 环境加载:直接建立文件流映射,启动运行时环境并加载脚本内核。
- 资源预读:根据配置预先读取并解析首屏相关的纹理、配置及脚本。
- 实例生成:完成所有非 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 不负责此路径下的资源更新,若业务侧替换了目录内的文件,建议销毁旧任务并重新调用此接口以重新加载。