Уменьшение размера apk с файлами .so

В нашем приложении для Android у нас есть два файла .so: один для x86, а другой для ARM. Они довольно большие и увеличивают размер .apk с 7 МБ до 11 МБ.

Поскольку файлы .so являются объектами времени выполнения, они должны находиться внутри файлов .apk.

Могу ли я каким-либо образом уменьшить размер файлов .so или лучше использовать/встроить его в свой .apk?

Я получил один пункт отсюда http://developer.sonymobile.com/2012/01/31/tips-for-reduction-apk-file-size/ т. е. удалить символы отладки из нативного кода.


person saurav    schedule 29.07.2014    source источник
comment
Как вы распространяете свое приложение? Через Play Маркет или как-то еще?   -  person CommonsWare    schedule 29.07.2014
comment
да через плей маркет   -  person saurav    schedule 29.07.2014
comment
Возможно, вы захотите использовать objdump или readelf ndk, чтобы узнать, что делает ваши файлы .so большими, и посмотреть, есть ли способ изменить это.   -  person Chris Stratton    schedule 29.07.2014


Ответы (1)


Play Маркет позволяет загружать отдельные APK для каждой архитектуры процессора. Таким образом, у вас будет ARM APK и x86 APK, а не один APK с обоими.

Настроить такие APK с помощью Gradle для Android относительно просто — используйте отдельный вариант продукта для каждой архитектуры. Я предполагаю, что есть способы сделать это за пределами Gradle для Android, хотя я подозреваю, что это более сложно.

Другой подход заключается в том, чтобы просто не распространять x86 .so. Современные устройства Android на платформе x86, как правило, имеют libhoudini, что позволяет им использовать библиотеки ARM .so NDK. Однако, как и в случае с эмулятором Android, эмуляция ARM на x86 медленная, поэтому вам нужно протестировать и посмотреть, приемлемо ли ваше приложение работает на x86.

И, как предлагает г-н Стрэттон, особенно если библиотеки ваши, посмотрите, можете ли вы уменьшить размер самой библиотеки. ProGuard не удаляет собственный код так, как он удаляет код Java.

person CommonsWare    schedule 29.07.2014