Как извлечь файлы из.obb файла?
В моем приложении я скачал файл расширения на Android->obb->packagename->main.1.packagename.obb . Может кто-нибудь объяснить мне, даже с примером кода, как извлечь из него мои файлы?
Я попытался использовать APK Expansion Zip Library в качестве:
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");
Но extensionFile всегда нулевой. Файл.obb был создан с помощью Jobb и используется в папке obb/file.zip .
2 ответа
Решается с помощью следующего кода:
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 .
Я использовал это для чтения конкретного файла из 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)
}