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

标签 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 才能获取此信息?

最佳答案

你可以通过反射(reflection)来做到这一点:

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。

关于Android Library 目标编译和后续 Android 版本中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798543/

相关文章:

Android org.json.JSONObject 在单元测试中返回 null

android - CrossWalk的XWalkView如何使用后退按钮返回,或禁用它?

java - Android 下载文件获取 FileNotFoundException

android - 位置管理器 : is the "network" provider always enabled?

android - 修复了移动版网站中的页眉和页脚

root 设备上的 Android Assets

java - Android Library编译到哪里?

android - 无法使用 android sdk 和 eclipse 解析 'adb version' 的输出

android - 无法执行 dex : Multiple dex files define Lcom/abc/abcsdk/Manifest$permission;

android - 我怎样才能对图书馆的 Activity 做出 Intent ?