Защо някои кодове на 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