Android库目标编译和后续Android版本中的对象

时间:2011-10-17 19:28:36

标签: android android-2.2-froyo android-library android-version

我正在构建一个Android库,并有一个方法来获取有关该设备的一些信息。我们的目标是支持2.2及更高版本但是想知道是否有办法收集更高版本中引入的信息(例如2.3中的设备序列)并且将应用程序设置为版本2.2进行编译。

搜索后,我发现人们使用的代码如下:

private static String getHardwareSerial() {
    try {  
        return Build.SERIAL;
    } catch (VerifyError e) {
        //Android 8 and previous did not have this information
        return Build.UNKNOWN;  
    }
}

但是,如果存在此代码,则在将构建目标设置为8时,使用我们的库的示例应用程序无法构建。任何建议或我们是否必须与客户一起设置其目标为9以获取此信息?

1 个答案:

答案 0 :(得分:1)

你可以通过反思来做到这一点:

public static String getHardwareSerial() {
    try {
        Field serialField = Build.class.getDeclaredField("SERIAL");
        return (String)serialField.get(null);
    }
    catch (NoSuchFieldException nsf) {
    } 
    catch (IllegalAccessException ia) {
    }
    return Build.UNKNOWN;
}

如果找不到该字段(在早期版本的操作系统上),它将抛出一个将被忽略的异常,然后通过返回Build.UNKNOWN。