如何找出ROM提供商?

8

我在我的应用程序中有一个自动错误报告功能,其中包含用于调试的有用信息。

我想要包括的一件事是ROM提供者。特别是,我想知道用户是否正在运行自定义ROM以及哪个版本,最好甚至包括版本号。

有什么办法可以通过编程方式检索此信息吗?

--- 来自 Quintin(见下文)

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

其中不变的是:
public static final String SYS_PROP_MOD_VERSION = "ro.modversion"; 

这里是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;
}

有使用CM ROM的人能为我运行这个吗?

顺便说一下,这是GPL代码。我不能使用它。 是否有更简单或非GPL的方法?

3个回答

5
我不确定是否有明确的提供者指示器,但您可以检查/proc/version的内容。这是CyanogenMod 4.0.4的输出结果:

Linux version 2.6.29.6-cm4 (shade@toxygen) (gcc version 4.4.0 (GCC) ) #8 PREEMPT Fri Aug 28 20:30:25 EDT 2009

提示在于“cm4”后缀,我认为它代表CyanogenMod 4(加上独特的user@host位,尽管不太清晰)。为了比较,这是运行1.6模拟器的版本:

Linux version 2.6.27-00110-g132305e (mikechan@cheetara.corp.google.com) (gcc version 4.2.1) #6 Mon Feb 2 12:47:38 PST 2009

您还可以检查android.os.Build的值。关于Build.TYPE并没有太多信息,但我认为类型“eng”代表官方构建,而类型“user”代表自制构建,所以这也可能会有用。

我想我会采用系统属性的另一种方法。不过还是谢谢你。顺便说一下,我相信目前官方的HTC Hero ROM运行的是ENG版本。 - Mariano Kamp
似乎Build.TYPE不足以确定它是否是自定义ROM。我刚在运行Android 9的三星Galaxy Note 10上进行了测试,它返回了“user”。 - Sam

4
Cyanogen-Updater项目中有代码具有这种功能,尽管我认为ROM信息是由ROM开发者提供的prop文件提供的,所以我不确定它是否会普遍工作。我没有彻底调查过这一点,但你可以查看源代码并找出来。

我看了一下。http://code.google.com/p/cyanogen-updater/source/browse/trunk/src/cmupdaterapp/utils/SysUtils.java#19public static String getReadableModVersion() { String modVer = getSystemProperty(Constants.SYS_PROP_MOD_VERSION); return (modVer == null || modVer.length() == 0 ? "Unknown" : modVer); }其中常量为: public static final String SYS_PROP_MOD_VERSION = "ro.modversion";你运行Cyanogen吗?你能为我执行这个并告诉我结果吗? - Mariano Kamp
没有格式化的注释?无论我放在哪里,它都会出现在顶部。 - Mariano Kamp
是的,我确实有他的ROM版本正在运行,并且我的结果是“CyanogenMod-4.0.4”,但是当在通过模拟器运行官方SDK构建时,我得到的是“Unknown”。 ro.modversion/system/build.prop 的 build.prop 文件中进行设置。 - Quintin Robinson

3

自定义ROM往往会覆盖Build.DISPLAY。我刚刚用CheckRom REVOHD V6进行了检查,它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接