Incluir Stetho solo en la variante de comstackción de depuración

Sé que puedo usar debugCompile para obtener solo una dependency para la debug build . ¿Existe una buena y simplificada forma de hacer la code initialization del code initialization que también se requiere? Sin las dependencias, las otras variantes no podrán comstackrse.

Tienes pocas opciones.

Opción 1: incluya Stetho para todas las comstackciones (utilizando compile lugar de debugCompile ) y solo debugCompile en su clase de Application para comstackciones de depuración.

Esto es bastante fácil de hacer. En tu clase de Application , BuildConfig.DEBUG manera:

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

Opción 2: solo incluya Stetho para comstackciones de depuración y cree diferentes clases de Application para comstackciones de depuración y liberación.

Gracias a Gradle, las aplicaciones pueden tener diferentes conjuntos de origen para diferentes variantes de comstackción. De forma predeterminada, tiene tipos de comstackción de versión y depuración, por lo que puede tener tres conjuntos de origen diferentes:

  • depurar código que solo desea en comstackciones de depuración
  • lanzamiento para el código que solo deseas en comstackciones de lanzamiento
  • principal para el código que desea en todas las construcciones

Es probable que su código de aplicación esté actualmente en el conjunto de fonts main . Simplemente puede crear una nueva carpeta llamada debug junto a la carpeta main en su aplicación y duplicar la estructura de su carpeta main para todo lo que desea agregar para comstackciones de depuración.

En este caso, desea una clase de Application en su conjunto fuente main que no haga referencia a Stetho en absoluto.

Entonces desea una clase de Application en su conjunto de fonts de debug que inicialice Stetho como lo haría normalmente.

Puede ver un ejemplo de esta configuración en la muestra de Stetho . Específicamente, aquí está la clase de aplicación principal , y aquí está la clase de aplicación de depuración . También tenga en cuenta que configuran manifiestos en cada conjunto fuente que selecciona qué clase de aplicación usar.

Verifique la respuesta de @Tanis.

También puedes usar algo como esto:

Agregue la biblioteca solo en la versión de depuración .

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

En su aplicación puede hacer:

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

Luego puede crear diferentes clases de StethoUtils en la versión de depuración / versión.

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

En src/release/java/

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

Usar la reflexión de Java puede ser una idea perfecta:

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

entonces podemos depurar comstackr stetho:

 debugCompile 'com.facebook.stetho:stetho:1.5.0'