gpt4 book ai didi

android - 无法读取/访问 APK 扩展 (.obb) 文件中的视频文件。它抛出空指针异常

转载 作者:行者123 更新时间:2023-11-29 01:51:51 27 4
gpt4 key购买 nike

一直在尝试从我的 apk 扩展(.obb 文件)中读取视频,但它似乎不起作用。已按照官方 android 文档中提到的每个步骤进行操作。我正在使用示例应用程序(Android-sdk/extras/google/play_apk_expansion/downloader_sample 中的示例下载器应用程序)来测试我是否可以读取 .obb 文件。这就是我所做的。

  1. 从我的 .mp4 视频文件创建压缩文件(零压缩)作为“videos.zip”。

  2. 使用 Android 的“jobb”工具成功创建了 .obb 文件。

  3. 将 obb 文件 (main.6.com.example.expansion.downloader.obb) 放在/sdcard/Android/obb/com.example.expansion.downloader/中。

  4. 创建了一个新的 MediaPlayerActivity 类 (MediaPlayerActivity.java),我试图在其中播放 .obb 文件中的视频文件。

    expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,
    6, 0);
    .....
    .....
    .....
    AssetFileDescriptor afd = expansionFile.getAssetFileDescriptor("sample1.mp4"); //nullpointerexception at this line.
    Log.i("afd: ", ""+afd); //afd is null. How come??

还尝试了以下(以防万一)

expansionFile.getAssetFileDescriptor("videos/sample1.mp4"). But it gives the same nullpointerexception. 

请帮助人们。

谢谢!

编辑:我想我可能已经找到了错误的根源。但仍然不知道如何修复它。实际上,expansionFile 本身包含空值。

expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this,
6, 0);
Log.i("expansionFile: ", ""+expansionFile); //--> expansionFile is null

此外,logcat 中还有一个我之前可能错过的错误 :-> “Not a Zip archive”将其存在追溯到 ZipResourceFile.java 中的 addPatchFile(zipFilename) 方法。

int header = read4LE(f);
if (header == kEOCDSignature) {
Log.i(LOG_TAG, "Found Zip archive, but it looks empty");
throw new IOException();
} else if (header != kLFHSignature) {
Log.v(LOG_TAG, "Not a Zip archive");
throw new IOException();
}

现在,当我尝试跟踪方法调用时,我发现我的

APKExpansionSupport.getAPKExpansionZipFile(...) 依次调用 getResourceZipFile(expansionFiles),后者又调用 addPatchFile(expansionFilePath)它显示了一个日志-->“不是 zip 存档”,如上面代码 fragment 中所示。所以我想,应该将 .obb 文件转换为 zip 文件(再次为零压缩),我将 obb 文件重命名为“main.6.com.example.expansion.downloader.obb.zip”(并且出于显而易见的原因。我还将代码中的 obb-path 重命名为 <...>.obb.zip)。完成所有这些后,现在 expansionFile 不包含空值,但我的 AssetFileDescriptor afd 仍然被分配了空值。好吧,显然这种方法对我来说似乎有缺陷(因为我认为 .obb 文件不应该压缩到 <..>.obb.zip。压缩后也尝试使用相同的 obb 文件名(即没有任何 .zip扩展名。)。它也不起作用)。

请帮忙。

P.S.:已经在“stackoverflow”和网络上查找了所有内容,但都没有帮助。

最佳答案

我使用 StorageManager 类访问 JOBB 创建的 obb 取得了有限的成功。我还没有尝试过 APKExpansionSupport 类。 StorageManager 内置于 Android 库中。

我说成功有限是因为大多数时候当我使用 mountObb() 挂载 obb 时不会调用 onObbStateChange()。但是,obb 似乎正在安装。我可以在文件系统中看到它,我可以调用 getMountedObbPath() 来访问它。

我有时也无法访问 obb 中的文件。它安装但随后似乎是空的(这让我看到了你的帖子)。在重建和下载新的 obb 后,这至少有一次自行修复。我不知道为什么,但此刻我再次无法访问这些内容。

关于android - 无法读取/访问 APK 扩展 (.obb) 文件中的视频文件。它抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17521340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com