Подтвердить что ты не робот

Уменьшение размера приложения для Android (apk)

Теперь я опубликую свое первое приложение в магазине Google Play. У меня уже сжатые изображения, используемые в моем приложении. И у меня есть некоторые вопросы относительно размера приложения.

Если размер приложения меньше 2 МБ, то есть меньше шансов, что пользователь удалит приложение, является ли это утверждение истинным для приложений, относящихся к области образования?

Однако, когда я вижу свой файл apk в окнах, он отображает 3.10 МБ, но когда он устанавливается на устройстве, если смотреть из информации о приложении, он показывает:

Total............................8.68 MB
App..............................7.02 MB
USB storage app..................0.00 B
Data.............................1.66 MB (perhaps it is the size of sqlite db + ttf's)
SD card..........................0.00B

Итак, почему я вижу такое увеличение размера моего приложения, можно ли его минимизировать?

И я использую 4 библиотеки (jars) в моем проекте, которые находятся в Android Private Libraries, но в этой библиотеке также есть их копия вне этой папки.

Безопаснее ли их удалять, и удаление их может помочь уменьшить размер apk?

Также я посетил множество веб-страниц, описывающих, что делает Proguard, я действительно понимаю, как Proguard уменьшает размер apk, он сжимает, оптимизирует и обфускает наш код, удаляя неиспользуемый код и переименовывая классы, поля и методы семантически неясные имена. В результате получается меньший размер .apk файла, который сложнее перестроить. Но я не знаю. Как должен выглядеть мой proguard-project.txt?
Я использую 4 библиотеки в своем приложении, а именно easyfacebookandroidsdk_2.3.jar, android-support-v7-appcompat.jar, google-play-services.jar и android-support-v4.jar.

В настоящее время мой proguard-properties.txt выглядит так, а также не использует WebView

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;  
#}
-keep class com.facebook.** { *; }
-keepattributes Signature

Итак, какие строки я должен добавить в свой proguard-properties.txt, чтобы он мог удалить неиспользуемые ссылки, классы и т.д., чтобы уменьшить размер apk?

Использование AndroidUnusedResources.jar, доступное в https://code.google.com/p/android-unused-resources/, находит неиспользуемые ресурсы в проекте android.

Я думаю, что это то же самое, что прогард уже сделал? Или он также должен использоваться после включения proguard?

Также вы можете указать в своем ответе все, что отсутствует, которое, по вашему мнению, должно быть общим.
Спасибо в Advance...

4b9b3361

Ответ 1

Итак, почему я вижу такое увеличение размера моего приложения, можно ли его минимизировать?

Почти исключительно из-за ваших изображений в папке res! У вас должно быть около 4 копий каждого изображения в папках drawable-mdpi, -hdpi, xhdpi. Единственное различие заключается в том, что theu все разные размеры.

Безопаснее ли их удалить, и удаление их может помочь уменьшить размер apk?

Скорее всего, нет нескольких копий этих файлов jar! Только один экземпляр со ссылками на него!

Proguard

Да, то, что вы сказали, было прав про Proguard. Однако, поймите, что вы говорите о текстовых файлах здесь. Они очень маленькие. Я имею в виду очень маленький размер (килобайт). Ваша проблема - это что-то в мегабайте (МБ). Это изображения!!!!

Повторить. Это изображения!!!!

Включение proguard сохранит немного по размеру.

Также вы можете указать в своем ответе все, что отсутствует, которое, по вашему мнению, должно быть общим?

Да, это все более важно в вашем случае. Пожалуйста, прочитайте и примените их. Удачи!

Если пользователь находит ваше приложение полезным, он не удалит его; однако есть несколько вещей, которые вы можете сделать

  • Можете ли вы перемещать изображения в Интернете и async в ваше приложение?
  • Убедитесь, что ваши файлы полностью сжаты как можно больше. Используйте pngquant или tinypng.
  • Проверьте наличие повторений на изображениях. Возможно, вы сможете использовать 9-патч.
  • Возможно, вы сможете создать свои собственные чертежи для определенных изображений.
  • Разрешить пользователям перемещать данные на SD-карту.

  • [ИЗМЕНИТЬ] После того, как приложение в Play Store какое-то время, проверьте консоль разработчика и посмотрите, какой размер/плотность экрана используется наименее. Удалите эту папку из вашего приложения!. Это может уменьшить размер хорошей суммы! Но, проверьте мои изменения ниже для недостатков этого подхода!

  • [РЕДАКТИРОВАТЬ 2] В проводнике Windows установите размер папки для всей папки res и всей папки java. Если размер вашей папки в java невелик, то все, что нужно для уменьшения размера APK, должно быть указано выше.

Возможно, вам захочется показать несколько изображений, так как это позволит нам увидеть, что вы имеете в виду

ИЗМЕНИТЬ

@Ashwin N Bhanushali Отличный ответ здесь по той части вопроса, на которую я не ответил, но он в основном сказал вам, что вы ничего не могли сделать кроме того, что я сказал, плюс идея или еще 2.

У меня была другая идея, основанная на одной из его идей, которая была бы даже лучше, потому что Android Studio больше не включает в себя папку drawable-ldpi в проекте. Поэтому было бы полезно, если вы используете Eclipse, мой расширяет

  • Отпустите APK в Google Play Store после внесения рекомендуемых исправлений.
  • По прошествии некоторого времени - неделя, месяц и т.д. вы можете проверить статистику вашего приложения в Консоль разработчика Google Play.
  • Посмотрите на ведра размера экрана (drawable-mdpi, -hdpi, -xhdpi, -xxhdpi), которые используются наименее!. Вы можете удалить те ведра из вашего приложения в целом!

Это работает, потому что изображения занимают больше байтов, чем текстовые файлы. И все эти чертежи имеют те же изображения в них (только разные размеры). Удаление изображений из менее используемых ковшей может сэкономить много места.

Обратите внимание, что удаление этих ведер из вашего приложения будет означать, что вашему приложению придется больше работать на тех телефонах, которые используют удаленные ведра. Приложение может быть медленнее для этих пользователей; однако размер приложения может быть уменьшен.

EDIT 2

Текстовые файлы занимают почти ничего. Взгляните в файловую систему для своего проекта!

На рисунке ниже. Проверьте размер...

  • папка java
  • папка res

enter image description here

В вашем случае вы увидите, что папка java , вероятно, очень маленькая по размеру (от 10 до нескольких сотен КБ); однако вы увидите, что папка res действительно большая по размеру (несколько МБ!).

Это означает, что любое сжатие или сокращение вашей базы кода будет очень маленьким и не стоит!

Поэтому лучший способ уменьшить размер APK - следовать моим инструкциям выше!

Изменить 3

Вот тест, который вы можете сделать сразу и увидеть абсолютный максимум (плюс больше), что такие инструменты, как Proguard и AndroidUnusedResources.jar, уменьшат размер файл APK!

Что вам нужно сделать, это удалить ВСЕ код из вашего проекта, за исключением объявлений классов. Сделайте то же самое для абстрактных классов, интерфейсов, перечислений и т.д. Ваша структура проекта должна оставаться неизменной, и вы не должны использовать какие-либо внешние библиотеки вообще.

  • Итак, у вас будет что-то подобное для всех ваших классов...

    public class CustomClass {
    
        private String variable; // List of variables
    
        public CustomClass() { ... } // List of constructors
    
        public getVariable() { ... } // List of Assessors
    
        public setVariable(String val) { ... } // List of Mutators
    
        private String helperMethods() { ... } // List of helper and other methods
    
    }
    
  • Вы должны удалить весь код внутри классов, интерфейсов, перечислений и т.д., чтобы выглядеть следующим образом; однако, оставляйте все свои изображения в покое!!...

    public CustomClass {
    
        // Everything is removed!! No libraries used, nothing. Unless certain classes 
        //     require some methods like Activity. Those methods should be empty though!
    
    }
    
  • Теперь скомпилируйте и создайте проект.

  • Проверьте новый размер APK на ваш текущий APK.

    • Это будет минимально возможный сжатый файл размера, который вы можете достичь с помощью своего кода. Да, ваша программа не будет делать ничего, но это не важно. Вы заботитесь о размере здесь, и это ТОЛЬКО тест.
  • Установите приложение на свой телефон и проверьте размер нового приложения на текущий размер приложения

    • Это будет наименьший возможный несжатый файл размера, который вы можете достичь с помощью своего кода. Да, ваша программа ничего не сделает, это всего лишь тест.

Если вы заметили, что 2 приложения по-прежнему имеют одинаковую размерность, то все это время с Proguard и AndroidUnusedResources.jar не имеет смысла на данном этапе. Это тест, чтобы увидеть, где вы будете тратить свои личные ресурсы на уменьшение размера приложения.

Ответ 2

Итак, почему я вижу такое увеличение размера моего приложения, можно ли его минимизировать?

.apk файл

Файл .apk не является магическим. Это просто набор файлов, которые представляют собой содержимое приложения для Android. Если вы откроете его в архиве-инструменте (например, 7Zip), вы можете просматривать его и извлекать.

Теперь этот файл apk извлекается во время установки, поэтому увеличивается размер приложения.

Дополнительная информация о компиляции

Что происходит с .java файлами?

Ну, сначала они обычно скомпилированы с помощью установленной реализации JDK. После того, как они скомпилированы (в .class файлы), dx-инструмент из Android SDK затем перекрестно компилирует эти "нормальные" java-классы в Dalvik-Bytecode.

Этот "специальный" java-код затем интерпретируется DVM (Dalvik Virtual Machine), который основан на JRE-реализации Apache Harmony с открытым исходным кодом.

Что происходит с ресурсами, которые я помещал в каталог/asset-каталог?

Android предлагает каталог/assets-каталог для добавления некоторых двоичных raw файлов (например, базы данных SQLite). Файлы, помещенные в этот каталог, не компилируются и не оптимизируются.

Если вы поместите свои файлы в этот каталог, это будет поведение, которое вы ожидаете от Android.

Что происходит с ресурсами, которые я помещал в каталог /res/raw -directory?

Как и каталог /assets, вы также можете разместить здесь двоичные (или другие) необработанные файлы (например, HTML файлы для справки). Эти файлы скомпилированы/оптимизированы (если возможно).

Что происходит с манифестом и другими XML файлами?

Android-манифест, а также другие XML файлы (макеты, строки и т.д.) хранятся и "скомпилируются" в двоичный XML-формат. Это оптимизация скорости.

Итак, вы получили ответ, почему размер приложения увеличивается после установки.

Теперь Безопаснее ли их удалить (Android-библиотеки), и удаление их может помочь уменьшить размер APK?

Вы можете удалить google-play-services.jar, так как он требуется только в среде разработки, которая не требуется в среде выполнения. Попросите пользователя установить его из магазина воспроизведения.

Переход к Proguard:: Он удалит неиспользуемые классы java и сделает obfuscation кода. Он не удалит неиспользуемые ресурсы, такие как layout xmls, drawables и т.д. Поэтому мое мнение заключается в запуске инструмента для удаления неиспользуемых ресурсов.

Ниже приведены советы по уменьшению размера.

You can remove drawable-ldpi folder if you are using it.Since there are no more devices with ldpi screen resolution.

Reduce the use of image drawables(i.e .png or jpg files).Use xml drawables and 9-patch drawables.

Remove any debug info related code.

Avoid code duplication.Follow the principal of Don't Repeat yourself.

Я думаю, этого достаточно, чтобы уменьшить размер приложения в вашем случае.

Ответ 3

Ниже приведены способы уменьшения размера приложения. Подробно объясняется в следующей ссылке.

https://medium.com/@fahimsakri/put-your-apks-on-diet-cc3f40843c84#.m860q8s1u

  • Proguard
  • векторные чертежи
  • Apk расщепляется
  • Оптимизация изображений png
  • Удалить неиспользуемые ресурсы
  • 9-патч-изображения
  • Сжатие изображений Jpeg
  • Удалить информацию об отладке
  • Избегайте дублирования
  • Широко использовать lint
  • Ресурс повторного использования по возможности
  • Рекомендуемые форматы мультимедиа

Ответ 4

Для тех из вас, кто делает гораздо меньшие проекты, подумайте об удалении всех библиотек приложений. Возможно, вам лучше создать несколько версий вашего приложения для определенных версий API. Я видел воздушный шар приложения размером 47 Кбайт до 3 Мбайт, просто добавив библиотеки совместимости.

Резюме. Чтобы сэкономить место, избегайте ненужных библиотек, даже тех, которые предоставляются Google (и включены в большинство шаблонов!).

Ответ 5

Попробуйте включить http://developer.android.com/tools/help/proguard.html даже без обфускации. Он удалит неиспользуемый код Java из ваших зависимостей. Посмотрите, есть ли у вас ненужные зависимости - JAR, которые вы добавили, но не используете Проверьте свои ресурсы для больших изображений или других файлов. Вы можете изменить их формат или разрешение или удалить их, если они не используются.

Ответ 6

Это один из вариантов, который вы сжимаете все свои PNG, чтобы вы могли перейти на https://tinypng.com/.

После этого удалите ненужный импорт библиотеки, например, не требуется импортировать библиотеку поддержки v4, если вы уже импортировали v7 для appcompat.

И, наконец, после завершения процедуры подписи apk используйте инструмент zipalign, который поставляется с android-sdk для более подробной информации, обратитесь http://developer.android.com/tools/help/zipalign.html.

Это все, что я знаю.

Ответ 7

Как правило, в ProGuard вы можете использовать следующее, чтобы уменьшить APK (это находится в вашем файле build.gradle):

...

android {

    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    ...

 }
 ...

В частности, посмотрите minifyEnabled true и shrinkResources true:

minifyEnabled отвечает за обфускацию и сжатие ваших файлов кода (например, Java). Это основная особенность ProGuard и помогает сжимать ваш APK, а также затрудняет реинжиниринг.

shrinkResources используется для удаления неиспользуемых файлов ресурсов (например, изображений и других активов). Например, если вы компилируете в библиотеке Android, но вы не используете некоторые изображения в этой библиотеке Android, они не будут включены в окончательную сборку. Существует хорошее видео разработчиков Android о нем здесь.

Ответ 8

Теперь вы также можете использовать векторный чертеж в своем приложении, чтобы удалить несколько чертежей для разных размеров экрана и уменьшить размер APK. см. fooobar.com/questions/140496/...

Ответ 9

Прежде всего, посмотрите на свои чертежи.

  • Если вы используете PSD для получения изображений для приложения, эти изображения могут быть не оптимизированы для Интернета и устройств. Вы фотошоп "Сохранить для Интернета и устройств", чтобы оптимизировать изображения. Вы можете уменьшить количество kbs от этого.
  • Далее, посмотрите, можете ли вы заменить изображения на XML-чертежи. Например, кнопки и фон можно выполнить с помощью XML

Ответ 10

ProGuard по умолчанию применяет сжатие, оптимизацию и обфускацию - это его основная цель. Вам нужно включить его в свою сборку Android, отредактировав документальную строку ProGuard в project.properties. Это позволяет ProGuard (с оптимизацией или без него) для сборки релизов с Ant и Eclipse. С помощью Ant вы увидите вывод ProGuard в журнале сборки.

Смотрите документацию по Android > Инструменты > ProGuard.

Затем вы должны проверить обработанное приложение. Вам могут потребоваться дополнительные параметры -keep, например. возможно, для служб Google Play. Чем меньше вы можете сохранить, тем меньше будет ваше приложение.

Ответ 11

Причина, по которой вы видите увеличенный размер файла, - это то, что APK - это сжатые файлы. Использование Proguard может помочь - здесь хороший ресурс:

http://developer.sonymobile.com/2012/01/31/tips-for-reducing-apk-file-size/

Однако я могу заверить вас, что вы можете получать миллионы загрузок, не будучи чувствительными к размеру файла. Как от моего личного опыта, так и от просмотра Google Play. Существуют тысячи приложений с миллионами загрузок, размер файлов которых значительно превышает 2 МБ. На самом деле их много, около 20 МБ. Другими словами, сделайте все возможное, чтобы оно было маленьким, но не беспокойтесь, что это повлияет на использование или скачивание.

Ответ 12

В большинстве случаев размер приложения является propotional к файлу ресурсов (изображения и другие материалы), которые вы используете для создания приложения. Всегда учитывайте следующее.

  • Попробуйте использовать минимальные изображения (в большинстве случаев нет необходимости добавлять изображения в папку Ldpi).
  • Используйте векторные изображения вместо размещения изображений для всех экранов разрешений. Один из способов - использовать SVG, 9 патч
  • Попробуйте использовать xml drawable для создания общих изображений, например квадрат, круг прямоугольника, границы и т.д. вместо изображений .png Попробуйте некоторые методы сжатия изображений.
  • Попробуйте извлечь большие изображения из Api, а не поместить его в res (Загрузите только при необходимости).

Импорт библиотек

  • Попробуйте удалить ненужные библиотеки при создании сборки для appstore.
  • Если вам нужна определенная функциональность в библиотеке, попробуйте извлеките необходимые файлы классов и используйте его, а не импортируете целая библиотека.
  • Очистите свой класс, удалив неиспользуемый импорт (хотя он не будет большое влияние на размер, но это сделает вещи более простыми и прямо). В eclipe выберите src folder- > rightclick- > source- > организовать импорт.

Ответ 13

Есть две вещи, которые я могу указать из опыта.

Если вы используете eclipse для создания файла apk, ресурсы дублируются (по крайней мере, это произошло в моем случае), вы можете попробовать использовать ant и build.xml для создания apk и сравнить размер. Также посмотрите на сглаживание ресурсов.

Ответ 14

Сжимайте APK/ZIP как можно выше, он сохранит на 30% больше, чем обычная сборка apk с помощью Android SDK, полезная, если большое количество текстовых файлов, но не большое количество изображений.

Ответ 15

Вы можете попробовать другие ответы, и они очень хороши, но есть еще одна небольшая хитрость для уменьшения огромного размера apk.
Мы используем много библиотек в наших проектах. некоторые из них разработаны на родном языке (c), а некоторые - для конкретной версии архитектуры.

У нас есть архитектура:

  • armeabi: Uncommon
  • armeabi-v7a: Common
  • arm64-v8a: Common
  • Mips: Rare
  • mips64: Rare
  • x86: Common
  • x86_64: Uncommon

Вы можете фильтровать целевые архитектуры и удалять ненужные опции. например:

buildTypes {
    debug {
        ...
    }
    release {
        ...
        ndk {
            abiFilters "arm64-v8a", "armeabi-v7a", "x86"
        }
    }
}

Ответ 16

Проверьте мой блог Различные способы уменьшить размер APK

Основные моменты:

  • android.enableR8 = true//включить новую программу сжатия кода R8
  • minifyEnabled true && Добавить правила Proguard
  • Проверьте свой APK с помощью Android Studios APK Analyzer
  • Включить сокращение ресурсов
  • Конвертируйте ваши PNG, JPEG и BMP в WebP
  • Избегайте перечислений и используйте аннотацию @IntDef
  • Используйте aaptOptions {cruncherEnabled = false} для сжатия изображений
  • Используйте функцию "Удалить неиспользуемые ресурсы" и встроенную функцию Android Studio, чтобы удалить все неиспользуемые ресурсы в приложении.
  • Используйте Code Cleanup android studio встроенную функцию для удаления

Примечание: включите его! (* просто дважды и трижды проверьте все работает потом)