Ваше предложение не будет работать (без отражения) при работе в более старой системе Android, если код, скрытый в "// некотором коде сота", использует имена классов или методов, которые существуют только в API сота.Корень проблемы в том, что все классы, на которые есть ссылки из кода, загружаются при загрузке класса.Необходимо использовать отражение, чтобы отложить разрешение кода, содержащего ссылки на соты, до времени выполнения.
В частности, если у вас есть класс:
class MyUseOfFeatures {
public void doSomething() {
if (TestIfPhoneHasFancyHoneycombFeature()) {
Object example = android.util.JsonReader(); // JsonReader is new in 3.0
}
}
Затем, когда JVM (например, DVM)?) загружает байт-код для этого класса, он попытается разрешить имя android.util.JsonReader при загрузке класса (предположительно при загрузке приложения).
Если вы полагаетесь только на какое-то поведение Honeycomb (а не на какие-либо новые классы, методы или поля), тогда можно проверить только номер сборки.