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

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

Как я могу предотвратить "процесс сборки" Android для оптимизации изображений .png?

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

- /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 не будет работать, потому что у них нет прозрачности.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

  • Измените main build.gradle, чтобы потребовать Gradle версию 1.1.3 (или новее):

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

    aaptOptions {  
        cruncherEnabled = false  
    }  
    

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

Ответ 3

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

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

Примечание: Доступно из Android Studio 3.0 Canary 5.

Ответ 4

Android Studio: с Gradle Android-плагин 1.0.0:

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

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

<target name="-crunch">
   <echo message="This will skip PNG optimization"/>
</target>

Ответ 5

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

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

android {
    ..
    ..

    aaptOptions.useAaptPngCruncher = false
}

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

UPDATE: это устарело в более поздних версиях Android Studio. Пожалуйста, обратитесь к ответу, предоставленному ChrisG.