Почему некоторый код Android работает на предыдущем уровне API, чем должен?

Я разрабатываю приложение для Android, которое, помимо прочего, использует метод toLongArray из java.BitSet. Как видно здесь, этот метод был представлен в Android API уровня 19, Android 4.4. Lint в Eclipse правильно предупреждает меня об этом, потому что моя minSdkVersion равна 10, но я могу настроить ее так, чтобы она не жаловалась.

При этом я мог собрать проект и запустить его: в Android 5.0 это работает, в Android 2.3 (уровень API 10) — нет, но, что удивительно, в Android 4.0.3, 4.1.2, 4.2 (которые ниже Уровень API 19) работает как шарм, хотя и не должен работать. То же самое происходит, даже если я установил min/target sdk на 15 (Android 4.0.3).

То же самое происходит, например, с Object.hashCode, и я не могу понять, почему это работает.


person Dsiefus    schedule 19.12.2014    source источник
comment
официально его там нет, но на самом деле он есть и скрыт androidxref.com/4.0.4/xref/libcore/luni/src/main/java/java/util/ Я думаю, поэтому они могли начать добавлять новые функции без необходимости поддержите их официально   -  person zapl    schedule 19.12.2014


Ответы (1)


На самом деле меня это очень удивило.

Я пошел в их репозиторий, чтобы посмотреть, что это за чертовщина. Итак, я обнаружил, что они добавляют некоторые методы, но скрывают их в документации, используя аннотацию @hide javadoc, пока они не будут полностью протестированы или пока они не вспомнят, чтобы показать их.

@hide При применении к пакету, классу, методу или полю @hide удаляет этот узел и все его дочерние элементы из документации.

поэтому, чтобы узнать правду, toLongArray() был фактически добавлен в фиксацию более 3 лет и 10 месяцев назад и на самом деле они показывают это 1 год и 7 месяцев назад в этом фиксации.

person Ahmed Hegazy    schedule 19.12.2014