web-dev-qa-db-fra.com

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

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.

56
theblang

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:

  • debug pour le code que vous souhaitez uniquement dans les versions de débogage
  • release pour le code que vous souhaitez uniquement dans les versions
  • main pour le code que vous voulez dans toutes les versions

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.

54
Tanis.7x

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
   }
}
87
Gabriele Mariotti

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'
4
ThomsonStan