我遇到了另一个与APK Expansion文件(.obb文件)有关的奇怪问题。我的扩展文件在我的所有测试设备上都可以正常运行:
我使用 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文件。有用。
提前致谢。
答案 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
方法而不是密码
mountObb
我不知道为什么storageManager.mountObb(mainObbFile.getAbsolutePath(), null, listener)
无法使用密码,如果有人知道请分享。