Skip to content

startGameByDirectoryPath

启动游戏(通过本地目录路径)

startGameByDirectoryPath 是最为底层的启动接口之一。它直接加载一个已经解压完成的游戏目录。由于该接口完全跳过了下载和解压阶段,它能以极低的 I/O 开销进入初始化流程。

该接口常用于开发者模式资源预置在 Assets 目录中并手动解压、或者业务侧有高度自定义的资源分发系统的场景。


方法声明

java
/**
 * 启动游戏,根据游戏本地目录路径
 *
 * @param directoryPath     本地目录路径
 * @param params            参数对象
 * @param listener          启动过程监听器
 * @return SUDOPGameTask    任务句柄
 */
public static SUDOPGameTask startGameByDirectoryPath(String directoryPath, SUDOPGamePackageParams params, SUDOPStartGameListener listener);

参数说明

属性类型描述
directoryPathString必填。游戏资源文件夹的绝对路径。目录根部需包含 app.json

1. SUDOPStartGameListener

  • void onGamePkgDecrypt(GamePkgDecryptHandle handle, String filePath):游戏包解密回调。
  • void onCreated(SUDRTGameHandle gameHandle):游戏实例创建完成。gameHandle为游戏实例句柄,可用于后续控制游戏生命周期或交互。
  • void onSuccess(String gameId, SUDRTGameHandle gameHandle):游戏启动成功。
  • void onFailure(int retCode, String retMsg):游戏启动失败。

2. GamePkgDecryptHandle

  • void success(String decryptedFilePath, boolean isDeleteFile):解密成功。decryptedFilePath:解密后的文件路径。isDeleteFile:游戏加载完成后是否删除该文件。

  • void fail(int retCode, String retMsg):解密失败。retCode:错误码。retMsg:错误信息描述。


运行行为

  1. 结构验证:SDK 检查 directoryPath 目录下是否存在必要的入口文件。
  2. 零拷贝加载:SDK 运行时直接读取该路径下的资源,不会将其复制到其他缓存位置。
  3. 引擎启动:加载 JS 核心库并启动游戏主逻辑。
  4. 视图挂载:在 onSuccess 回调中返回 gameView,开发者将其添加到 Activity 布局即可看到画面。

代码示例

java
String directoryPath = getFilesDir().getAbsolutePath() + "/game_res/my_tetris_folder/";

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 gameTask = SUDOP.startGameByDirectoryPath(directoryPath, params, new SUDOPStartGameListener() {
    @Override
    public void onGamePkgDecrypt(GamePkgDecryptHandle handle, String filePath) {
    }
    @Override
    public void onCreated(SUDRTGameHandle gameHandle) {
    }
    @Override
    public void onSuccess(String gameId, SUDRTGameHandle gameHandle) {
        // 将这个View贴到app自身的页面上即可
        View gameView = gameHandle.getGameView();
    }
    @Override
    public void onFailure(int retCode, String retMsg) {
    }
});

注意事项

  • 路径规范:请确保传入的是文件夹路径。如果该目录下的文件发生变动,可能需要重新调用启动接口以确保逻辑正确。
  • 资源管理:SDK 不会自动清理此接口指定的目录。业务侧需负责该目录的生命周期管理(如更新或删除旧目录)。
  • 线程安全:回调在主线程执行,可直接操作 UI。