Я пытался прочитать видео из моего расширения apk (файл .obb), но, похоже, это не работает. Выполнили все шаги, упомянутые в официальных документах Android. Я использую приложение-образец (приложение-загрузчик образцов в Android-sdk/extras/google/play_apk_expansion/downloader_sample), чтобы проверить, могу ли я прочитать файл .obb. Это то, что я сделал.
Создал заархивированный файл (без сжатия) из моих видеофайлов .mp4 как «videos.zip».
Файл .obb успешно создан с помощью инструмента Android «jobb».
Поместил файл obb (main.6.com.example.expansion.downloader.obb) в /sdcard/Android/obb/com.example.expansion.downloader/ .
Создал новый класс 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 = APKExpansionSupport.getAPKExpansionZipFile(this,
6, 0);
Log.i("expansionFile: ", ""+expansionFile); //--> expansionFile is null
Кроме того, в логарифме была еще одна ошибка, которую я мог пропустить ранее: -> «Не Zip-архив», который прослеживает свое существование до метода addPatchFile (zipFilename) в ZipResourceFile.java.
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), где отображается log--> «Не zip-архив», как показано выше во фрагменте кода. Итак, я предполагаю, что файл .obb должен быть преобразован в zip-файл (снова нулевое сжатие), что я и сделал, и переименовал файл obb в «main.6.com.example.expansion.downloader.obb.zip» (и по понятным причинам.Я также переименовал путь obb в коде на ‹...>.obb.zip). Сделав все это, теперь expansionFile не содержит нулевого значения, но моему AssetFileDescriptor afd по-прежнему присваивается нулевое значение. Ну, очевидно, этот подход кажется мне ошибочным (поскольку я думаю, что файл .obb не должен быть заархивирован в ‹..>.obb.zip. расширение.) Это тоже не сработало).
Пожалуйста помоги.
P.S.: Искал по всему "stackoverflow" и сети, но ни один из них не помог.