无法在魅族m3笔记上安装.obb文件(state = 21)

时间:2016-10-24 18:09:08

标签: android apk-expansion-files

我遇到了另一个与APK Expansion文件(.obb文件)有关的奇怪问题。我的扩展文件在我的所有测试设备上都可以正常运行:

  • Sony Xperia Z1 Compact(API 22)
  • Sony Xperia Z1 Ultra(API 22)
  • LG Nexus 5X(API 23)
  • LG Nexus 4(API 17)

我使用 jobb -utilite创建了加密的.obb文件:

jobb -o obb-filename -d files-dir -k 密码 -pn applicationId -pv versionCode

在我的应用程序中,我使用以下代码阅读.obb文件:

public void initialize(final Context context) {
    final StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
    final File mainObbFile = getMainObbFile();

    final OnObbStateChangeListener listener = new OnObbStateChangeListener() {
        @Override
        public void onObbStateChange(String path, int state) {
            super.onObbStateChange(path, state);
            if (state == OnObbStateChangeListener.MOUNTED) {
                // work with obb file
            } else {
                throw new RuntimeException("OnObbStateChangeListener::onObbStateChange - can't mount .obb file (state = " + state + ").");
            }
        }
    };

    final String key = BuildConfig.MAIN_XAPK_KEY;
    if (storageManager.isObbMounted(mainObbFile.getAbsolutePath())) {
        // work with obb file
    } else if (!storageManager.mountObb(mainObbFile.getAbsolutePath(), key, listener)) {
        throw new RuntimeException("Can't create listener for mounting .obb file.");
    }
}

一切正常。但是在魅族m3音符(API 22)上我们得到了一个奇怪的错误:“OnObbStateChangeListener :: onObbStateChange - 无法挂载.obb文件(状态= 21)”。

以前,我遇到过这个问题,它是用另一代.obb文件解决的。但在这种情况下,它没有帮助。 另外,我尝试使用修复 jobb工具(https://github.com/monkey0506/jobbifier.git)生成.obb文件,但它不起作用。

可能有人知道,有什么问题,为什么有时.obb文件在某些​​设备上不起作用?...

更新
此外,我已经检查了在魅族上安装未加密的.obb文件。有用。

提前致谢。

2 个答案:

答案 0 :(得分:2)

  

我遇到了同样的问题,我发现错误21很多次   由Linux文件权限引起的obb,问题是   Android无法访问它,因此StorageManager启动   错误21.创建.obb文件时,请更改权限和用户   分组到文件,如:

$chmod 664 <obb-filename>.obb    
$chown user:group <obb-filename>.obb

然后再试一次,为我工作。

答案 1 :(得分:0)

我遇到错误代码21的同样问题我从{<1}}删除了<{1}}

-k password

并在jobb -o obb-filename -d files-dir -pn applicationId -pv versionCode 方法而不是密码

中传递null
mountObb

我不知道为什么storageManager.mountObb(mainObbFile.getAbsolutePath(), null, listener) 无法使用密码,如果有人知道请分享。