Библиотека поддержки Android значительно увеличивает размер APK
Я использую библиотеку поддержки AppCompat
в своем Android-проекте. AppCompat
имеет множество ресурсов и ресурсов, которые я не использую в своем приложении. Эти ненужные файлы увеличивают мое приложение 900K до выше 2M, что мне не нравится.
Есть ли способ исключить эти файлы при создании файла APK? Или я должен запутывать библиотеку в моем коде вместо того, чтобы делать зависимость?
Я использую Gradle в Android Studio.
Спасибо
EDIT 1 Я уже использую proguard. но proguard не может знать, что я не хочу иметь drawable-xxxhdpi
или values-it
, например.
EDIT 2 Я также использую Android Lint, который не может мне помочь, beacuse. Я не имею прямого доступа к lib-коду, и андроид добавляет их при создании файла APK.
Ответы
Ответ 1
От Android Gradle Build System, начиная с версии 0.7.0:
Новая опция для продукта Flavor (и defaultConfig
) позволяет фильтровать ресурсы через опцию -c aapt
Вы можете передать одиночное значение (resConfig
) или несколько значений (resConfigs
) через DSL.
Все значения из конфигурации по умолчанию и вкусов объединяются и передаются в aapt
.
См. "Базовый" образец.
В "базовом" образце:
defaultConfig {
...
resConfig "en"
resConfigs "nodpi", "hdpi"
}
Итак, попробуйте следующее, чтобы достичь того, что вы просили:
productFlavors {
...
frOnly {
resConfig "fr"
}
...
}
Обратите внимание, что вы также можете включить *dpi
, port
, land
и т.д..
Ответ от: Android Studio экспортирует строки из библиотеки поддержки в APK, благодаря Primoz990
Ответ 2
Начиная с версии 24.2.0, библиотека поддержки v4 была разделена на несколько меньших модулей.
Таким образом, помимо использования shrinkResources
и proguardFiles
, также убедитесь, что вы используете только те конкретные модули, которые необходимы вашему приложению. например.
Если ваше приложение использует только такие утилиты, как NotificationCompat, ContextCompat или ResourcesCompat и т.д., используйте только совместимый модуль:
compile 'com.android.support:support-compat:24.2.0'
Ответ 3
shrinkResources также может быть для вас вариантом. Он доступен с 0,14 - но будьте осторожны - у него все еще есть некоторые ямы, такие как защита ресурсов при использовании shrinkResources
Ответ 4
Хотя OP выяснил, что использует proguard, я бы хотел опубликовать некоторый код, если он помогает кому-то, потому что я могу сократить свое приложение с 3,8 МБ до 3,1 МБ с помощью принятого ответа и далее до 1,8 МБ ProGuard. Я использовал эту конфигурацию в файле build.gradle на уровне приложения:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}