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
}
}