Отключить оптимизацию ресурса Android/изображения/PNG

Как запретить «процессу сборки» Android оптимизировать изображения .png?

У меня есть проект Android со следующими каталогами res:

- /res/
- /res/drawable
- /res/drawable-hdpi
- /res/drawable-hdpi-v5
- /res/drawable-ldpi
- /res/drawable-ldpi-v5
- /res/drawable-mdpi
- /res/drawable-mdpi-v5

Эти каталоги содержат множество файлов .png. Я оптимизирую размеры PNG с помощью PNGOUTWin, и общий размер уменьшается более чем на 20%. Когда я создаю файл .apk, изображения "оптимизируются" в процессе сборки, и общий размер теперь на 10 % больше исходного размера или на 30 % больше моего оптимизированного размера/PNGOUTWin.

Моя цель — уменьшить размер .apk, даже если это повлияет на конечную производительность, требования к памяти и т. д. Как запретить «процессу сборки» оптимизировать изображения .png?

Я ориентируюсь на Android 2.2 и выше.

P.S.: В настоящее время я создаю свой проект Android из Eclipse, но позже я переключусь на автоматическую сборку (Ant?).

Примечание относительно изображений JPG: JPG не будет работать, так как они непрозрачны.


person Maris B.    schedule 17.10.2012    source источник


Ответы (6)


Как указано в документации Android: http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables

Примечание. Ресурсы изображений, размещенные в res/drawable/, могут быть автоматически оптимизированы с помощью сжатия изображений без потерь с помощью инструмента aapt в процессе сборки. Например, полноцветный PNG, для которого не требуется более 256 цветов, можно преобразовать в 8-битный PNG с цветовой палитрой. Это приведет к получению изображения такого же качества, но требует меньше памяти. Имейте в виду, что двоичные файлы изображений, размещенные в этом каталоге, могут измениться во время сборки.

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

person Vinayak Bevinakatti    schedule 17.10.2012
comment
8-битные файлы PNG с альфа-каналом — красивые тени, много цветов, размер 200x200 выглядит некрасиво. Не идеально. В настоящее время используется постобработка Photoshop + Web Image Guru + PNGOUTWin. - person Maris B.; 17.10.2012
comment
Да, у вас не может быть эффектов градиента, эффектов теней и т. д., как в PNG в JPG, поэтому я упомянул только использование jpg везде, где это возможно. - person Vinayak Bevinakatti; 17.10.2012
comment
Принимаю ваш ответ, потому что действительно изображения, которые хорошо выглядят в 8-битном формате PNG, не оптимизируются процессом сборки. Однако в итоге я использовал Ant + 7-zip + оригинальные PNG. - person Maris B.; 20.10.2012
comment
этот ответ вообще не отвечает на вопрос, я не понимаю, как он был принят - person Display Name; 24.08.2015

Наконец, есть официальный способ отключить измельчитель PNG с помощью Gradle, который здесь еще не упоминался:

  1. Отредактируйте основной файл build.gradle, чтобы он требовал версии 1.1.3 (или новее):

    buildscript {  
        repositories {  
            mavenCentral()  
        }  
        dependencies {  
            classpath 'com.android.tools.build:gradle:1.1.3'  
        }  
    }  
    
  2. В файле build.gradle отдельных приложений, раздел android {}, вставьте:

    aaptOptions {  
        cruncherEnabled = false  
    }  
    

Ссылка: https://code.google.com/p/android/issues/detail?id=65335

person ChrisG    schedule 23.04.2015
comment
Вау, это только что сократило время сборки примерно на 1 минуту для моих отладочных сборок. - person Patrick Favre; 01.11.2015
comment
Можно ли это сделать только для отладочной сборки? Может быть, это может сократить время сборки - person android developer; 14.02.2017

Указание сжатия PNG теперь является свойством BuildType и отключено по умолчанию в отладочных сборках:

android {
    …
    buildTypes {
        release {
            crunchPngs false // or true
        }
    }
}

Примечание. Его можно найти по адресу Android Studio 3.0 Canary 5.

person pRaNaY    schedule 01.07.2017
comment
Спасибо. После того, как много времени было потрачено впустую, ваш единственный ответ помог мне. - person Taras Vovkovych; 07.12.2017
comment
Поляна помогает вам. Спасибо :) - person pRaNaY; 07.12.2017

Android Studio: начиная с подключаемого модуля Gradle для Android 1.0.0:

android {
...
  aaptOptions {
    useNewCruncher false
  }
....
}

Eclipse: переопределите срочную задачу, написав это в файле build.xml:

<target name="-crunch">
   <echo message="This will skip PNG optimization"/>
</target>
person Yair Kukielka    schedule 08.03.2015
comment
Я подтверждаю, что ваш пример Eclipse также работает с рабочим процессом командной строки на основе Ant; заключив код в тег <project> и поместив их в custom_rules.xml, поместив в корневую директорию проекта - изначально я думал, что переопределение не сработает (поскольку PNG не будут скопированы в папку bin/res), но оказалось, что набор инструментов в этом случае просто использовал бы PNG из исходной папки res. - person xwindows -on strike-; 04.09.2019

 buildTypes {
        release {
            crunchPngs false // or true
        }
    }

добавить над строкой блок android в

в проекте ionic/Cordova: root_folder_Of_App/platforms/android/app/build.gradle

в проекте Android: app/build.gradle

введите здесь описание изображения

Для получения дополнительной информации посетите: https://androidstudio.googleblog.com/2017/06/android-studio-30-canary-5-is-now.html

person Shashwat Gupta    schedule 11.05.2020

Google недавно представил новый процессор PNG в aapt 0.9.1 в Инструменты сборки Android SDK, которые устраняют проблему увеличения размера PNG после оптимизации aapt.

Благодаря этому обновлению Android Studio и Gradle теперь могут переключаться между процессорами PNG со следующим изменением в файле конфигурации build.gradle:

android {
    ..
    ..

    aaptOptions.useAaptPngCruncher = false
}

Добавляя эту строку, aapt использует новый процессор PNG, в котором он проверяет, меньше ли «оптимизированные» файлы PNG, чем исходные файлы PNG. Мне удалось уменьшить размер скомпилированного APK на 4,8 МБ, и я не обнаружил никаких ошибок/проблем с новой конфигурацией сборки.

ОБНОВЛЕНИЕ: это устарело в более поздних версиях Android Studio. Пожалуйста, обратитесь к ответу ChrisG.

person Huh X0015    schedule 27.03.2014
comment
Я думаю, что на данный момент это устарело, используйте ответ @ChrisG - person Patrick Favre; 01.11.2015