Intereting Posts
Создать случайный цвет Java Как вы определяете задержку звука (AudioTrack) на Android? Как заставить AccountManager отображать экран «Запрос доступа» после того, как пользователь уже разрешил доступ? Android: AppWidget с настраиваемым представлением не работает Показать диалог с помощью onActivityResult Как вызвать вкладку Onclick и OnTabChange для одной вкладки Android: как распаковать зашифрованный zip-файл `$ Cookies.put ()` занимает 30 секунд, чтобы сохранить файл cookie на диске на Android 3D-карусель в Android Видимость кнопки набора Не удается получить доступ к микрофону, когда другое приложение использует его в Android Лучшая практика – добавление приложения в меню Android Share Как рассчитать точное количество шагов ноги с помощью акселерометра в android? Android – невозможно открыть содержимое: файл: /// storage / emulated / 0 Предотвратить андроид от повторного создания стека активности после сбоя

Как сделать плагины Hugo и AndroidDevMetrics скомпилированы только при отладке:

Я использую Jack's Wharton Hugo Library и плагины AndroidDevMetrics для измерения времени выполнения программы и производительности приложения в Android. Мне нужно сделать эти библиотеки компилируемыми только в сборке отладки и исключить их из сборников релизов.

Поскольку обе библиотеки использовались только с использованием синтаксиса плагина:

apply plugin: 'com.frogermcs.androiddevmetrics' apply plugin: 'com.jakewharton.hugo' 

И не требуют каких-либо зависимостей в файле Gradle, я не могу их исключить, используя параметр testCompile . Единственный способ, которым управляет Hugo , установить это в файле gradle:

 hugo { enabled false } 

В то время как единственный способ контролировать AndroidDevMetrics :

 public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); //Use it only in debug builds if (BuildConfig.DEBUG) { AndroidDevMetrics.initWith(this); } } } 

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

Заранее спасибо.

Solutions Collecting From Web of "Как сделать плагины Hugo и AndroidDevMetrics скомпилированы только при отладке:"

Вы можете использовать комбинацию Proguard и Sourcesets, чтобы гарантировать, что библиотеки не скомпилированы в ваше приложение-релиз, и свойства градиента для условного применения плагинов.

Условно, включая плагины

Вы можете условно включить плагин gradle, объявив его, как обычно, в верхней части вашего build.gradle и окружая его условным предложением. Например, приведенный ниже код проверяет, существует ли свойство, и если это так, применяет плагин.

 if (hasProperty('shouldApplyDevMetrics')) { println "Applying devmetrics plugin" apply plugin: 'com.frogermcs.androiddevmetrics' } else { println "Not applying devmetrics plugin in release build" } 

Чтобы включить свойство, вы можете использовать флаг командной строки ниже при вызове gradle. Вы можете создать аналогичные конфигурации запуска, если хотите использовать Android Studio.

 ./gradlew assembleDebug -PshouldApplyDevMetrics=true 

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

Использование Proguard

Первый (и самый простой) подход к полностью удалению библиотеки из APK состоит в том, чтобы вырезать весь соответствующий код с помощью инструмента Proguard. Вам следует обновить версию release buildType, чтобы включить proguard, и загрузить файл настраиваемых правил.

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

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

 -dontwarn hugo.weaving** 

Этот подход означает, что вам нужно поддерживать зависимость в файле build.gradle, но это лучший подход для чего-то вроде Hugo, который используется повсюду, добавляя аннотации.

Использование Sourcesets

Чтобы полностью удалить библиотеку AndroidDevMetrics из сборки релиза, мы должны начать с создания набора отладки и релиза, затем добавить функциональный класс под src / debug и класс no-op под src / release.

 // src/debug public class DevMetricWrapper() { void doMetricsThings(Context context) { AndroidDevMetrics.initWith(context); } } // src/release public class DevMetricWrapper() { void doMetricsThings(Context context) { // no-op } } 

Затем вы можете изменить файл build.gradle для своего модуля, чтобы библиотека включалась только в качестве зависимости отладки:

 debugCompile 'com.example.yourlibrary' 

Обратите внимание: если вы планируете делать что-то более сложное, Кинжал – очень полезная библиотека, так как позволяет вам вводить различные зависимости в зависимости от того, какой вкус вы создаете.

Hugo auto гарантирует, что:

 project.dependencies { debugCompile 'com.jakewharton.hugo:hugo-runtime:1.2.2-SNAPSHOT' // TODO this should come transitively debugCompile 'org.aspectj:aspectjrt:1.8.6' compile 'com.jakewharton.hugo:hugo-annotations:1.2.2-SNAPSHOT' } 

Найди его здесь

Только аннотация ничего не может сделать, все в порядке.

О AndroidDevMetrics вы можете прочитать « Начать»

 public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); //Use it only in debug builds if (BuildConfig.DEBUG) { AndroidDevMetrics.initWith(this); } } } 

Возможно, это не так чисто, но это работа. Когда вы запускаете выпуск, код чист.