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:
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'