without supported studio query que not dependency android android-studio stetho

android - supported - stetho realm que es



Incluya Stetho solo en la variante de compilaciĆ³n de depuraciĆ³n (3)

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


Tienes pocas opciones.

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

Esto es bastante fácil de hacer. En su clase de Application , marque BuildConfig.DEBUG así:

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

Opción 2: solo incluya Stetho para compilaciones de depuración, y cree diferentes clases de Application para compilaciones de depuración y lanzamiento.

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

  • depurar el código que solo desea en las compilaciones de depuración
  • lanzamiento para el código que solo desea en las versiones de lanzamiento
  • principal para el código que desea en todas las compilaciones

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

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

Luego, desea una clase de Application en su conjunto de fuentes de debug que inicialice Stetho como lo haría normalmente.

Puede ver un ejemplo de esta configuración en el ejemplo 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 de origen que selecciona qué clase de aplicación usar.


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 compilar stetho:

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


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 / liberació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 } }