2009-10-10 8 views
8

Tengo una función de informe automático de errores en mi aplicación que incluye información útil para la depuración.¿Cómo saber quién es el proveedor de ROM?

Una cosa que me gustaría incluir es el proveedor de ROM. En particular, me gustaría saber si el usuario está ejecutando una ROM personalizada y cuál, preferiblemente incluso con el número de versión.

¿Alguna idea de cómo recuperar esta información mediante programación?

--- Tomado del Quintin (véase más adelante)

http://code.google.com/p/cyanogen-updater/source/browse/trunk/src/cmupdaterapp/utils/SysUtils.java#19:

public static String getReadableModVersion() { 
    String modVer = getSystemProperty(Constants.SYS_PROP_MOD_VERSION); 
    return (modVer == null || modVer.length() == 0 ? "Unknown" : modVer); 
} 

medio de las cuales la constante es la siguiente:

public static final String SYS_PROP_MOD_VERSION = "ro.modversion"; 

Y aquí es el getSystemProperty();

public static String getSystemProperty(String propName){ 
      String line; 
      BufferedReader input = null; 
    try 
    { 
      Process p = Runtime.getRuntime().exec("getprop " + propName); 
     input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024); 
     line = input.readLine(); 
     input.close(); 
    } 
    catch (IOException ex) 
    { 
      Log.e(TAG, "Unable to read sysprop " + propName, ex); 
      return null; 
    } 
    finally 
    { 
      if(input != null) 
      { 
          try 
          { 
            input.close(); 
          } 
          catch (IOException e) 
          { 
            Log.e(TAG, "Exception while closing InputStream", e); 
          } 
      } 
    } 
    return line; 
} 

¿Alguien con un CM ROM puede ejecutar esto por mí?

Btw. Cuidado, este es el código GPL. Yo, por mi parte, no puedo usarlo. Cualquier forma más fácil o no GPL?

Respuesta

4

Hay un código en el proyecto Cyanogen-Updater que tiene esta funcionalidad, aunque creo que la información de la rom es provista por un archivo prop provisto por el desarrollador rom así que no estoy seguro si funcionará universalmente. No he investigado esto a fondo, pero pueden echar un vistazo a la fuente y descubrirlo.

+0

He echado un vistazo. http://code.google.com/p/cyanogen-updater/source/browse/trunk/src/cmupdaterapp/utils/SysUtils.java#19 pública getReadableModVersion static String() { cadena ModVer = getSystemProperty (Constantes.SYS_PROP_MOD_VERSION); return (modVer == null || modVer.length() == 0? "Desconocido": modVer); } Por el cual la constante es esto: public static final Cadena SYS_PROP_MOD_VERSION = "ro.modversion"; ¿Funciona Cyanogen? ¿Podrías ejecutar eso por mí y decirme el resultado? –

+0

¿No hay formato en los comentarios? Lo que sea que puse también en la parte superior, entonces. –

+0

Sí, tengo una versión de su rom ejecutándose, y el resultado es "CyanogenMod-4.0.4", sin embargo, cuando se ejecuta en una compilación SDK oficial a través del emulador, obtengo "Desconocido". La 'ro.modversion' se establece en el archivo build.prop en /system/build.prop –

5

No sé si hay un indicador claro del proveedor, pero puede inspeccionar el contenido de /proc/version. Aquí está la salida para CyanogenMod 4.0.4:

Linux versión 2.6.29.6-cm4 (sombra @ Toxygen) (versión de gcc 4.4.0 (CCG)) # 8 PREEMPT Vie Ago 28 de 2009 20:30:25 EDT

la sugerencia aquí es el sufijo "cm4", que (creo ) representa CyanogenMod 4 (más el distintivo bits usuario @ host, aunque de forma menos clara). A modo de comparación, aquí está la versión para el emulador corriendo 1.6:

versión para Linux 2.6.27-00110-g132305e ([email protected]) (versión de gcc 4.2.1) # 6 Mon Feb 2 12:47:38 PST 2009

También podría consultar los valores de android.os.Build. No hay mucha información en Build.TYPE, pero asumo que tipo "eng" significa compilación oficial, y tipo "usuario" significa compilación casera, por lo que podría ser útil también.

+0

Creo que iré por el otro enfoque con la propiedad del sistema. Pero gracias de cualquier manera. Por cierto. Creo que el actual, oficial, HTC hero rom ejecuta una compilación ENG. –

3

ROMS personalizados tienden a sobrescribir Build.DISPLAY. Acabo de consultar con CheckRom REVOHD V6 y funcionó.

Cuestiones relacionadas