Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo definir y utilizar una propiedad del sistema en la prueba de instrumentación de Android?

Estoy tratando de utilizar algunos argumentos para una prueba de instrumentación. Me di cuenta de que puedo leer las propiedades del sistema con la función System.getProperty() . Así que utilizo el comando setprop para establecer una propiedad del sistema. Por ejemplo: adb shell setprop AP 123 . Dentro de mi código de prueba intento leer esta propiedad de AP con:

 tmp = System.getProperty("AP"); Log.d("MyTest","AP Value = " + tmp); 

Luego utilizo logcat para ver este mensaje de depuración pero obtengo un valor nulo para esta propiedad. ¿Ideas sobre lo que podría estar mal? Tenga en cuenta que todavía puedo leer la propiedad del sistema con adb shell getprop AP comando.

  • Terminado con valor de salida no cero 3
  • Cambio de la variable de entorno de origen en eclipse
  • USB bulkTransfer entre la tableta Android y la cámara
  • ¿Cómo determino la orientación predeterminada de los marcos de previsualización de la cámara?
  • Android ArrayIndexOutOfBoundsException y AbsListViewRecycleBin.addScrapView
  • Animación al cambiar Actividad en Android?
  • Acceso a recursos en un proyecto de prueba de Android
  • IDEA - "Importar desde un modelo externo" vs "Crear desde una fuente existente"?
  • 5 Solutions collect form web for “Cómo definir y utilizar una propiedad del sistema en la prueba de instrumentación de Android?”

    Para obtener la propiedad establecida por 'setprop', hay dos opciones:
    Uno. Use android.os.SystemProperties, esta es una API de ocultar. Úsalo así:

     Class clazz = null; clazz = Class.forName("android.os.SystemProperties"); Method method = clazz.getDeclaredMethod("get", String.class); String prop = (String)method.invoke(null, "AP"); Log.e("so_test", "my prop is: <" + prop + ">"); 

    Dos. Use la utilidad 'getprop':

     Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/getprop", "AP"}); BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); Log.e("so_test", "my prop is: " + reader.readLine()); 

    Tal vez el uso de funciones disponibles en NDK es una opción también, pero ¿por qué molestarse?

    Las propiedades del sistema se leen una vez cuando se inicia la VM de raíz (Zygote), que a su vez genera otras VM de Dalvik como la de su aplicación. Esto significa que no puede establecer las propiedades del sistema sobre la marcha.

    Intente reiniciar Zygote usando la adb shell stop (espere hasta que se haya detenido) y adb shell start (espere hasta que se haya reiniciado), luego vuelva a intentarlo. O simplemente reinicie el dispositivo o el emulador.

    Debido a que hay dos tipos de propiedad en Android.

    1. Nivel del sistema – podemos obtener / establecer con el comando adb shell getprop/setprop .
    2. En el nivel de proceso actual – podemos obtener / establecer con regular java System.getProperty()/setProperty() .

    A medida que está configurando una propiedad de nivel de sistema y tratando de obtener su valor como nivel de proceso actual, está obteniendo valor nulo en el registro.

    Aquí está una versión un poco más sana basada en la respuesta de accuya:

     public static String readSystemProperty(String name) { InputStreamReader in = null; BufferedReader reader = null; try { Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/getprop", name}); in = new InputStreamReader(proc.getInputStream()); reader = new BufferedReader(in); return reader.readLine(); } catch (IOException e) { return null; } finally { closeQuietly(in); closeQuietly(reader); } } public static void closeQuietly(Closeable closeable) { if (closeable == null) return; try { closeable.close(); } catch (IOException ignored) { } } 

    Import android.os.SystemProperties

    Cadena s = SystemProterties.get ("ro.xxx.xxx", "valor predeterminado si la propiedad no está establecida");

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.