Включить Stetho только в варианте сборки отладки

Я знаю, что я могу использовать debugCompile чтобы вытащить dependency для debug build . Есть ли хороший, оптимизированный способ выполнить code initialization которая также требуется? Без зависимостей другие варианты не скомпилируются.

У вас есть несколько вариантов.

Вариант 1: Включить Stetho для всех сборок (с использованием compile вместо debugCompile ) и только инициализировать его в вашем classе Application для отладочных compilationов.

Это довольно легко сделать. В своем classе Application проверьте BuildConfig.DEBUG следующим образом:

 if (BuildConfig.DEBUG) { Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build() ); } 

Вариант 2: Включите Stetho для отладочных compilationов и создайте разные classы Application для отладки и выпуска.

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

  • отлаживать код, который вам нужен только в отладочных assemblyх
  • релиз для кода, который вам нужен только в assemblyх релизов
  • основной код, который вы хотите во всех assemblyх

Вероятно, ваш код приложения находится в main исходном наборе. Вы можете просто создать новую папку под названием debug рядом с main папкой в ​​вашем приложении и зеркалировать структуру вашей main папки для всего, что вы хотите добавить для отладочных compilationов.

В этом случае вам нужен class Application в вашем main исходном наборе, который вообще не ссылается на Stetho.

Затем вам нужен class Application в вашем источнике debug который инициализирует Stetho, как обычно.

Вы можете увидеть пример этой установки в образце Stetho . В частности, вот главный class Application , и вот class отладки Application . Также обратите внимание, что они настраивают манифесты в каждом наборе источников, который выбирает, какой class приложения использовать.

Проверьте ответ @Tanis.

Также вы можете использовать что-то вроде этого:

Добавьте библиотеку только в отладочную версию .

 dependencies { debugCompile 'com.facebook.stetho:stetho:1.1.1 } 

В своем приложении вы можете:

 public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); StethoUtils.install(this); } } 

Затем вы можете создать другой class StethoUtils в версии debug / release.

В src/debug/java/

 public class StethoUtils{ public static void install(Application application){ Stetho.initialize( Stetho.newInitializerBuilder(application) .enableDumpapp(Stetho.defaultDumperPluginsProvider(application)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(application)) .build()); } } 

В src/release/java/

 public class StethoUtils{ public static void install(Application application){ // do nothing } } 

Использование java-отражения может быть проницательной идеей:

 private void initStetho() { if (BuildConfig.DEBUG) { try { Class stethoClazz = Class.forName("com.facebook.stetho.Stetho"); Method method = stethoClazz.getMethod("initializeWithDefaults",Context.class); method.invoke(null, this); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } 

то мы можем отлаживать компиляцию stetho:

 debugCompile 'com.facebook.stetho:stetho:1.5.0' 
  • Lint: Как игнорировать « не переводится в »?
  • Android Studio с двумя файлами манифеста
  • Java.lang.ClassNotFoundException после обновления студии Android
  • ActionBarActivity устарела
  • Файл APK не существует на диске
  • Как фильтровать logcat в Android Studio?
  • Автономный вариант SDK Manager в Android Studio 2.3
  • Ошибка Gradle 0.9. + / 0.9.2: невозможно загрузить class 'com.android.builder.testing.api.DeviceProvider'
  • Лучший способ включить Volley (или другую библиотеку) в проект Android Studio
  • Активность по умолчанию не найдена в Android Studio
  • Использование Android Studio с Vuforia
  • Давайте будем гением компьютера.