Целевая компиляция и объекты библиотеки Android в более поздних версиях Android - PullRequest
1 голос
/ 17 октября 2011

Я создаю библиотеку 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 Ответ

1 голос
/ 18 октября 2011

Вы можете сделать это с помощью отражения:

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.

...