tutorial studio programacion móviles libros desarrollo desarrollar curso aprende aplicaciones android development-environment release-management

studio - Distinguir el modo de desarrollo y la configuración del entorno del modo de lanzamiento en Android



programacion android pdf 2018 (8)

Estoy construyendo una aplicación de Android y me gustaría mantener algunas variables de entorno que puedo modificar dependiendo de si estoy en modo de desarrollo o en modo de lanzamiento. Por ejemplo, necesito invocar un servicio web y la URL será ligeramente diferente en cualquier modo. Me gustaría externalizar esta y otras configuraciones para poder cambiarlas fácilmente en función de mi implementación de destino.

¿Existen mejores prácticas o algo en el SDK para ayudar con esta necesidad?


Android build.gradle maneja bien el entorno de depuración y liberación.

Añada el siguiente fragmento de código en el archivo build.gradle

buildTypes { debug { buildConfigField "Boolean", "IS_DEBUG_MODE", ''true'' } release { buildConfigField "Boolean", "IS_DEBUG_MODE", ''false'' } }

Ahora puedes acceder a la variable como a continuación

if (BuildConfig.IS_DEBUG_MODE) { { //Debug mode. } else { //Release mode }


¿Qué tal algo así como el código de abajo ...

public void onCreate Bundle b ) { super.onCreate(savedInstanceState); if ( signedWithDebugKey(this,this.getClass()) ) { blah blah blah } blah blah blah } static final String DEBUGKEY = "get the debug key from logcat after calling the function below once from the emulator"; public static boolean signedWithDebugKey(Context context, Class<?> cls) { boolean result = false; try { ComponentName comp = new ComponentName(context, cls); PackageInfo pinfo = context.getPackageManager().getPackageInfo(comp.getPackageName(),PackageManager.GET_SIGNATURES); Signature sigs[] = pinfo.signatures; for ( int i = 0; i < sigs.length;i++) Log.d(TAG,sigs[i].toCharsString()); if (DEBUGKEY.equals(sigs[0].toCharsString())) { result = true; Log.d(TAG,"package has been signed with the debug key"); } else { Log.d(TAG,"package signed with a key other than the debug key"); } } catch (android.content.pm.PackageManager.NameNotFoundException e) { return false; } return result; }


@ viktor-bresan Gracias por una solución útil. Sería más útil si solo incluyeras una forma general de recuperar el contexto de la aplicación actual para que sea un ejemplo totalmente funcional. Algo en la línea del siguiente:

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);



La siguiente solución asume que en el archivo de manifiesto siempre establece android:debuggable=true mientras desarrolla y android:debuggable=false para el lanzamiento de la aplicación.

Ahora puede verificar el valor de este atributo desde su código marcando el indicador ApplicationInfo.FLAG_DEBUGGABLE en la ApplicationInfo obtenida de PackageManager .

El siguiente fragmento de código podría ayudar:

PackageInfo packageInfo = ... // get package info for your context int flags = packageInfo.applicationInfo.flags; if ((flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { // development mode } else { // release mode }


Me encontré con otro enfoque hoy por accidente que parece realmente sencillo. Mira Build.TAGS, cuando la aplicación se crea para desarrollo, se evalúa como "claves de prueba" de String.

No es mucho más fácil que una comparación de cuerdas.

¡También Build.MODEL y Build.PRODUCT evalúan a la Cadena "google_sdk" en el emulador!



De acuerdo con esta post , en SDK Tools versión 17 (estamos en 19 en el momento de escribir esto) agrega una constante BuildConfig.DEBUG que es verdadera al construir una compilación de desarrollo.