Наблюдение за увеличением размера после миграции на LibC ++ в Android - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над переходом на LibC ++ из Gnustl и наблюдаю общее увеличение 8-10% размера * после перехода на LibC ++ из gnustl в Android.Мы добавили несколько дополнительных зависимостей, которые могли бы учитывать размер:

• Статическое связывание дополнительного libunwind.a из libc ++ в каждом из них.

• Переопределение класса typeInfo, особенно из-за разницыв поведении проверки typeInfo == operator.

Но даже после этих двух изменений я не понимаю, что привело к общему увеличению размера.Сначала я подозревал, что введение LibC ++ отключает удаление символов отладки, но это тоже не так, я убедился, явно отключив -Wl, - gc-section & -ffunction-section -fdata-section ,что еще больше увеличивает размер генерируемых SO и APK.

Так как многие другие уже прошли этот цикл, я подумал, что было бы хорошо спросить, наблюдали ли другие побочные эффекты увеличенияразмер при использовании LibC ++?

Спасибо /

1 Ответ

0 голосов
/ 27 июня 2019

Я предлагаю проанализировать ваш APK с помощью инструмента анализа Android Studio: Для этого в Android Studio просто зайдите в Build -> Analyze APK -> выберите любой встроенный APK-файл и, наконец, просмотрите размер каждого файла, содержащегося в вашем APK:

Analyze APK example

Затем сравните его с APK, используя Gnustl

Обычно наибольшее увеличение размера APK - это собственные .so файлы. Вероятно, собственные файлы libc ++ больше, чем у Gnustl. Или, что еще более вероятно, libg ++ добавляет файлы .so для некоторых архитектур ЦП, а Gnustl - нет. Я имею в виду, что в каталоге lib может появиться больше каталогов.

Если во втором случае вы можете использовать Android App Bundle при публикации APK в Google Play, чтобы устройства просто загружали свои наиболее подходящие файлы .so, а не другие. Что значительно уменьшает общий размер установленного приложения.

...