Android - публиковать / тестировать apk с файлами расширения - как это работает?

Я все еще учусь на Android, и у меня есть приложение, которое имеет более 100 МБ, и поэтому мне нужно использовать файлы расширения.

Я прочитал тысячи документов, но я очень смущен.

Есть много mp3-файлов, которые мне нужно сжать в такого рода "файле расширения", чтобы загружать только apk-код, а не весь app + mp3-файлы.

Я думаю, что если я сгенерирую файл ".obb" со всеми этими mp3-файлами, я получу более 50 МБ, по запросу Google Play.

Я знаю, что этот файл '.obb' должен находиться в папке scard/Android/obb моего устройства.

В настоящее время мой код получает ресурс 'int' из mp3-файла, чтобы управлять им следующим образом:

intMyResource=R.raw.name_of_my_music_file;

Но в настоящее время, как я уже сказал, путь к файлам - "R.raw".

Мой вопрос: как лучше всего заменить метод?

intMyResource=R.raw.name_of_my_music_file;

к фактическому пути / имени, где мой файл.obb?

Спасибо вам всем.

Mauro

1 ответ

Вы должны создать файл расширения с этой командой zip:

zip -r -9 -n ".mp3" main-expansion-file.zip *

Параметр -n крайне важен, чтобы не сжимать медиа-файлы, потому что если медиа-файлы сжаты, вы не сможете использовать их в своем приложении для Android. Измените имя zip на 'main.VERSIONCODE.YOURPACKAGENAME.obb и скопируйте этот файл.obb в папку scard/Android/obb на устройстве.

Чтение файлов из zip-файлов расширения - это простая работа с библиотекой Google ZipFile (доступна в pathAndroidSDK/extras/google/play_apk_expansion/zip_file)

Замените R.raw.name_music_file вызовом этого метода:

public static AssetFileDescriptor getFileDescriptor(Context ctx, String path) {
        AssetFileDescriptor descriptor = null;
        try {
            ZipResourceFile zip = APKExpansionSupport.getAPKExpansionZipFile(ctx, 1, -1);
            descriptor = zip.getAssetFileDescriptor(path);
        } catch (IOException e) {
            Log.e("APKExpansionSupport", "ERROR: " + e.getMessage(), e);
            e.printStackTrace();
        }
        return descriptor;
    }

Пример кода для воспроизведения музыки из файла расширения с MediaPlayer:

    AssetFileDescriptor descriptor = null;
            try {
                descriptor = getFileDescriptor(this, "name_music_file.mp3"));
                MediaPlayer reproductor = new MediaPlayer();
                reproductor.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
                reproductor.setOnCompletionListener(this);
                reproductor.prepare();
                reproductor.start();

            } catch (Exception e) {
                Log.e("Play mp3", "ERROR: " + e.getMessage(), e);
            } finally {
                if (descriptor != null)
                    try{descriptor.close();} catch (IOException e) {}
            }

Надеюсь, это поможет вам!

Другие вопросы по тегам