Inclure Stetho uniquement dans la variante de construction de débogage

Je sais que je peux utiliser debugComstack pour extraire uniquement une dependency pour la version de debug build . Existe-t-il un moyen efficace et simplifié d’ code initialization le code initialization requirejs? Sans les dépendances, les autres variantes ne pourront pas être compilées.

Vous avez quelques options.

Option 1: Inclure Stetho pour toutes les versions (en utilisant comstack au lieu de debugComstack ) et l’initialiser uniquement dans votre classe Application pour les versions de débogage.

C’est assez facile à faire. Dans votre classe d’ Application , cochez BuildConfig.DEBUG comme BuildConfig.DEBUG :

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

Option 2: n’incluez Stetho que pour les versions de débogage et créez différentes classes d’ Application pour les versions de débogage et de publication.

Grâce à Gradle, les applications peuvent avoir différents jeux de sources pour différentes variantes de construction. Par défaut, vous disposez de types de build release et debug, vous pouvez donc avoir trois jeux de sources différents:

  • débogage pour le code que vous voulez seulement dans les versions de débogage
  • version pour le code que vous voulez seulement dans les versions de publication
  • main pour le code que vous voulez dans toutes les versions

Votre code d’application est probablement tous actuellement dans le jeu de sources main . Vous pouvez simplement créer un nouveau dossier appelé debug côté du dossier main de votre application et reproduire la structure de votre dossier main pour tout ce que vous voulez append aux versions de débogage.

Dans ce cas, vous voulez une classe d’ Application dans votre ensemble de sources main qui ne fait pas référence à Stetho.

Ensuite, vous voulez une classe Application dans votre ensemble de sources de debug qui initialise Stetho comme vous le feriez normalement.

Vous pouvez voir un exemple de cette configuration dans l’ échantillon Stetho . Plus précisément, voici la classe principale de l’application , et voici la classe de l’application de débogage . Notez également qu’ils définissent des manifestes dans chaque ensemble de sources qui sélectionne la classe d’applications à utiliser.

Vérifiez la réponse @Tanis.

Vous pouvez aussi utiliser quelque chose comme ceci:

Ajoutez la bibliothèque uniquement sur la version de débogage .

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

Dans votre application, vous pouvez faire:

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

Ensuite, vous pouvez créer différentes classes StethoUtils dans la version debug / release.

Dans 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()); } } 

Dans src/release/java/

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

Utiliser la reflection java peut être une idée pratique:

 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(); } } } 

alors on peut déboguer comstackr stetho:

 debugComstack 'com.facebook.stetho:stetho:1.5.0'