Proguard - исключить библиотеку

В целях тестирования в моем приложении есть некоторые настройки разработчика. Иногда я включаю библиотеки представлений и пробую то, что работает лучше всего / быстрее всего. Т.е. библиотеки загрузчика изображений, такие как picasso / glide / ion ...

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

  • Я не хочу удалять библиотеку из своего проекта (или комментировать включения и все классы), возможно, завтра у меня будет что-то новое для тестирования, и я не хочу снова включать библиотеки и писать для нее дополнительный код опять таки
  • Я хочу, чтобы моя сборка выпуска полностью исключила импортированные библиотеки, которые не используются

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

Изменить

Я также открыт для альтернативных решений, например, что-то вроде c ++ #ifdef или около того (хотя я думаю, что это невозможно в java). Или какое-то препроцессорное решение, может быть, через плагин?


person prom85    schedule 04.07.2016    source источник


Ответы (1)


Вы могли сделать следующее:

Определите свойства в вашем build.gradle для каждой библиотеки загрузки изображений

project.ext {
   picassoEnabled = true
   glideEnabled   = false
   ...
}

Затем в конфигурации buildType вы можете выборочно добавить дополнительные правила, которые сохраняют соответствующую библиотеку:

buildTypes {
  release {
    proguardFile getDefaultProguardFile('proguard-android.txt')
    proguardFile 'proguard-project.txt'
    if (project.picassoEnabled) {
      proguardFile 'proguard-picasso.txt'
    }
    if (project.glideEnabled) {
      proguardFile 'proguard-glide.txt'
    }
  }
}

В каждом из конфигурационных файлов proguard для библиотек у вас будут правила для хранения библиотеки:

-keep class com.squareup.picasso.** { *; }

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

person T. Neidhart    schedule 05.07.2016
comment
Сначала это выглядело неплохо, пока я не увидел часть отражения ... Это не вариант для меня ... Но все же это решение. Мне бы очень хотелось, чтобы что-то вроде стиля c ++ #ifdef полностью закомментировало фрагменты кода через переменную ... - person prom85; 05.07.2016