【问题标题】:How to extract files from .obb file?如何从 .obb 文件中提取文件?
【发布时间】:2015-07-13 22:06:06
【问题描述】:

在我的应用程序中,我在 Android->obb->packagename->main.1.packagename.obb 下载了扩展文件。 有人可以向我解释一下如何从示例代码中提取我的文件吗?

我尝试将 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.zip 上使用。

【问题讨论】:

标签: android zip expansion apk-expansion-files


【解决方案1】:

用以下代码解决:

    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 中的数据。

【讨论】:

    【解决方案2】:

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

    在您的 AndroidManifest.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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2015-12-15
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多