Apk добавлен в размер после добавления FFmpegMediaMetadataRetriever

Я добавил зависимость (com.github.wseemann: FFmpegMediaMetadataRetriever: 1.0.3) к моему приложению (build.gradle) в моей Android-студии, apk перескочил с 2 до 16 МБ. Я просто использовал образец кода ничего больше, есть ли способ иметь меньший размер, чем этот?

        FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
        mmr.setDataSource("http://testsite.com/test/upload/Twale_FLO.mp3");
        mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM);
        mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST);
        long duration =Long.parseLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
        duration=duration/1000;
        long minute=duration/(60);
        long second=duration-(minute*60);
        mmr.release();
        your_text_view.setText(minute+":"+second);

Ответ 1

FFmpegMediaMetadataRetriever использует собственный код. Это означает, что библиотека включает в себя предустановленные двоичные файлы для каждой архитектуры Android. Если вы хотите уменьшить размер APK, вам нужно будет использовать предварительно построенные библиотеки, найденные на странице проекта FFmpegMediaMetadataRetriever, и вручную создать APK для каждой поддерживаемой архитектуры.

Ответ 2

Единственный способ уменьшить размер Apk после включения FFmpegMediaMetadataRetriever - это плюсы поддержки ABI.

FFmpegMediaMetadataRetriever использует собственный код, который отличается для каждого используемого процессора. Если вы не разрезаете, все внутренние коды будут объединены внутри вашего APK: всего 25 МБ или больше!

Итак, добавив эти строки в ваш build.gradle, вы включите разделение APK:

lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }

    splits {

        // Configures multiple APKs based on ABI.
        abi {

            // Enables building multiple APKs per ABI.
            enable true

            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for x86, armeabi-v7a, and mips.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "x86", "armeabi-v7a", "mips", "arm64-v8a", "x86_64", "armeabi"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk true
        }
    }

Итак, после сборки apk (или создания подписанного APK) ваша сборка будет иметь 6 apks, по одному для каждого процессора. Загрузите их все в Google Play, чтобы ваш пользователь загружал только необходимые файлы. APe Armeabi-v7a будет всего около 6 Мб!