当前位置: 首页 > 知识库问答 >
问题:

如何从中提取文件。obb文件?

印季
2023-03-14

在我的应用程序中,我下载了Android系统的扩展文件-

我尝试将APK扩展Zip库用作:

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(MainActivity.this, 3, 0);  
for (ZipResourceFile.ZipEntryRO entry : expansionFile.getAllEntries())
Log.d("",entry.mFileName);
InputStream input = expansionFile.getInputStream(Environment.getExternalStorageDirectory().toString()
                            + "/sdcard/Android/obb/com.example.project/main.3.com.example.project.obb/obb/file.zip/file.apk");

但是expansionFile总是空的。这个obb文件是用Jobb创建的,用于文件夹obb/file。拉链

共有2个答案

宗冷勋
2023-03-14

我用它从obb读取特定文件:

在你的Androidanifest.xml:

<!-- Needed for reading the obb file -->
<provider
    android:name=".extension.ZipFileContentProvider"
    android:authorities="com.example.extension.ZipFileContentProvider"/>

ZipFileContentProvider:

public class ZipFileContentProvider extends APEZProvider {
  @Override
  public String getAuthority() {
    return "com.example.extension.ZipFileContentProvider";
  }
}

获取文件URI:

final Uri CONTENT_URI = Uri.parse("content://" + "com.example.extension.ZipFileContentProvider");
Uri uri = Uri.parse(CONTENT_URI + "/drawable/" + name)

为了创建obb文件,我使用了gradle脚本(res文件夹在同一个目录中):

task createExpansionFile(type: Zip) {
  from 'res'

  entryCompression = ZipEntryCompression.STORED
  archiveName = 'main' + '.' + '1' + '.' + 'com.example' + '.obb'

  println archiveName
  println relativePath(destinationDir)
  println relativePath(archivePath)
}
公冶谦
2023-03-14

用以下代码解决:

    final StorageManager storageManager = (StorageManager) getSystemService(STORAGE_SERVICE);
    String obbPath = Environment.getExternalStorageDirectory() + "/Android/obb";
    final String obbFilePath = obbPath + "/com.example.project/main.3.com.example.project.obb";
    OnObbStateChangeListener mount_listener = new OnObbStateChangeListener() {
          public void onObbStateChange(String path, int state) {
                if (state == OnObbStateChangeListener.MOUNTED) {
                      if (storageManager.isObbMounted(obbFilePath)) {
                            Log.d("Main","Mounted successful");
                            String newPath  = storageManager.getMountedObbPath(obbFilePath);
                            File expPath = new File(newPath+"/file.zip/file.apk");
                            Log.d("Main","File exist: " + expPath.exists());
                      }
                }
          }
    };
    storageManager.mountObb(obbFilePath, "key", mount_listener);

安装后。obb文件,我可以访问路径mnt/obb/myfolder中的数据

 类似资料:
  • 问题内容: 我正在尝试使用提取此 PDF文件中包含的文本。 我正在使用PyPDF2模块,并具有以下脚本: 运行代码时,得到以下输出,该输出与PDF文档中包含的输出不同: 如何提取PDF文档中的文本? 问题答案: 要从PDF提取文本,请使用以下代码

  • 下面的“build.gradle”: 当您运行时: 它产生: 我肯定这一定是可能的,那么你是怎么做到的呢?

  • 问题内容: 我需要在运行时复制一个打包在Jar中的文件夹。我想通过在同样包含在同一文件夹中的类中调用函数来实现。 我试过使用: 但这不起作用。我可能必须递归使用函数。有没有更优雅/前瞻的方式来做到这一点? 万一我必须递归地做它:1.我不想指定硬编码的文件,我想动态地做它2.我不想创建一个单独的档案。我希望此资源与处理该资源的类位于同一个Jar中 谢谢 我最后做了Koziołek的建议。尽管我希望有

  • 问题内容: 当用户在网页中选择文件时,我希望能够仅提取文件名。 我确实尝试过str.search函数,但是当文件名像这样时似乎失败: c:\ uploads \ ilike.this.file.jpg 。 我们如何仅提取不带扩展名的文件名? 问题答案: 假设您的 < input type =“ file”>具有上 载 ID,则有望实现这一目标:

  • 我需要从大文件中提取文本(最大限制50MB)文件可能是doc、ppt、xls、txt或pdf格式。到目前为止,我使用了ApachePOI'http://poi.apache.org/' 用于Microsoft Office文档和PDFBox从PDF中提取文本。然而,随着文件变大,提取过程变得缓慢,特别是以下文件。到目前为止我取得的成果: 1. PPTX-45MB-3分钟apx 2.PDF-62MB

  • 我已经成功地实现了谷歌示例sdk中给出的项目,我有一个。带有2个文件夹的obb文件,其中包含图像。 这就是我的道路 我的. obb文件有以下2个文件夹 现在当我运行时,它将下载我上传的扩展文件。apk文件,但如何显示文件夹中的图像? 下面是我的代码: