Je sais que je peux utiliser debugCompile
pour tirer uniquement un dependency
pour le debug build
. Existe-t-il un bon moyen rationalisé de faire le code initialization
cela est également requis? 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 compile
au lieu de debugCompile
) et l'initialiser uniquement dans votre Application
classe pour les versions de débogage.
C'est assez facile à faire. Dans votre classe Application
, cochez BuildConfig.DEBUG
ainsi:
if (BuildConfig.DEBUG) {
Stetho.initialize(
Stetho.newInitializerBuilder(this)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
.build()
);
}
Option 2: Inclure uniquement Stetho pour les versions de débogage et créer différentes classes Application
pour les versions de débogage et de publication.
Grâce à Gradle, les applications peuvent avoir différents ensembles de sources pour différentes variantes de build. Par défaut, vous disposez de types de versions de version et de débogage, vous pouvez donc avoir trois ensembles de sources différents:
Votre code d'application est probablement actuellement dans l'ensemble source main
. Vous pouvez simplement créer un nouveau dossier appelé debug
à côté du dossier main
dans votre application et refléter la structure de votre dossier main
pour tout ce que vous souhaitez ajouter pour les versions de débogage.
Dans ce cas, vous voulez une classe Application
dans votre ensemble source main
qui ne référence pas du tout Stetho.
Ensuite, vous voulez une classe Application
dans votre ensemble source debug
qui initialise Stetho comme vous le feriez normalement.
Vous pouvez voir un exemple de cette configuration dans le exemple Stetho . Plus précisément, voici la classe Application principale , et voici la classe Application debug . Notez également qu'ils ont configuré des manifestes dans chaque ensemble source qui sélectionne la classe d'application à utiliser.
Vérifiez la réponse @Tanis.
Vous pouvez également utiliser quelque chose comme ceci:
Ajoutez la bibliothèque uniquement sur version de débogage.
dependencies {
debugCompile '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 une classe StethoUtils
différente dans la version de débogage/libération.
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 Java réflexion peut être une idée parfaite:
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 nous pouvons déboguer compiler stétho:
debugCompile 'com.facebook.stetho:stetho:1.5.0'