Google môže odstrániť prístup k nezdokumentovaným/skrytým rozhraniam API v systéme Android P

Podľa súboru záväzkov v AOSP môže spoločnosť Google začať obmedzovať prístup k nezdokumentovaným alebo skrytým rozhraniam API v systéme Android P. Mnoho značkových aplikácií používa skryté API na rozšírenie funkčnosti, takže efekt môže byť rozšírený.

Aktualizácia 28. 2. 2018: Google dnes zverejnil blogový príspevok potvrdzujúci zmeny. Viac podrobností na konci článku.

Zatiaľ čo niektorí nadšenci Androidu áno špekulovať po akom dezerte bude pomenovaná ďalšia verzia Androidu, v zákulisí sa odohráva niekoľko zaujímavých udalostí. Zistili sme a málo hodné povšimnutia pripravované funkcie v systéme Android P, ale oveľa zaujímavejší sa ukázal nedávny objav v projekte Android Open Source Project (AOSP). Podľa týchto nedávnych potvrdení môže byť aplikáciám obmedzený prístup k rozhraniam API, ktoré nie sú zdokumentované v súprave Android SDK (napríklad rozhrania API označené atribútom javadoc @hide).


Prečo na tom záleží

Android Software Development Kit (SDK) poskytuje vývojárom knižnice a nástroje API, ktoré potrebujú na testovanie a vytváranie nových aplikácií pre Android. S každým novým vydaním Androidu prichádza celý rad nových API, ktoré sú dostupné pre vývojárov prostredníctvom Android SDK. Aké rozhrania API sú dostupné pre aplikáciu, závisia od toho, akú verziu kompilácie SDK nastaví vývojár. To je dôvod, prečo Google

nové požiadavky Obchodu Play sú také významné – prinúti aplikácie aktualizovať sa a migrovať na používanie novších rozhraní API.

Google hostí dokumentačné stránky pre každú triedu a všetky jej metódy, ktoré sú dostupné na každej úrovni API. Toto je súbor zdokumentovaných rozhraní API, ktoré sú k dispozícii v oficiálnej súprave Android SDK. Zoznam tried môžete jednoducho prehliadať pomocou aplikácie pre Android, ako je napríklad nedávno vydaná aplikácia Android SDK Search od Android Engineer Jake Wharton.

SDK SearchVývojár: Jake Wharton

Cena: zadarmo.

4.1.

Stiahnuť ▼

Nie všetky rozhrania API, ktoré sú k dispozícii v každom vydaní systému Android, však zdokumentuje spoločnosť Google alebo sú k dispozícii v oficiálnej súprave Android SDK. Často existujú užitočné rozhrania API nezdokumentovaný, ale napriek tomu sú veľmi užitočné. Neodporúča sa, aby vývojári vytvárali svoje aplikácie pomocou nezdokumentovaných alebo skrytých API, ale mnohí tak robia, pretože jednoducho neexistuje žiadna alternatíva, ak chcú ponúknuť určitú funkciu. Vývojári, ktorí používajú skryté alebo nezdokumentované rozhrania API, sa môžu dostať do konkurenčnej výhody, pretože môžu ponúknuť funkcie, ktoré majú ich konkurenti – ktorí sa držia rozhraní API ponúkaných systémom Android SDK – nemôže.

Aj keď nemôžem poskytnúť zoznam aplikácií, ktoré využívajú nezdokumentované rozhrania API (vývojári pravdepodobne nezdieľajú ktoré používajú, pretože by to ich konkurentom pomohlo), zoznam je pravdepodobne skôr veľký. Preto by som dospel k záveru, že zákaz prístupu k skrytým rozhraniam API by bol významný. Mark Murphy, zakladateľ spoločnosti Commonsware, súhlasí:

Súhlasím s hodnotením, že hromadný zákaz prístupu k položkám s anotáciou @hide bude veľkým problémom, ak k tomu dôjde. Dúfajme, že len málo aplikácií pristupuje k týmto položkám ako súčasť kľúčových funkcií. Mám však podozrenie, že veľa značkových aplikácií ich príležitostne používa, priamo alebo prostredníctvom knižnice.


Čo sa deje v systéme Android P?

Tieto nadchádzajúce zmeny prvýkrát zaznamenal XDA Senior Recognized Developer rovo89, vývojár spoločnosti Xposed Framework. Upozornil ma na dva záväzky, jeden z ktoré bol zlúčené, ktorá predstavuje nový nástroj na zostavovanie s názvom „hiddenapi“. Tento nástroj upravuje prístupové príznaky všetkých členov triedy v rámci súboru DEX, ak ich podpisy sa objavia na vstupnej greyliste alebo čiernej listine, a ak áno, označené metódy sa budú považovať za interné API s obmedzeným prístup. Druhý commit popisuje, ako funguje API blacklist; bráni v prístupe boot trieda metódy a polia označené vyššie uvedeným „hiddenapi“, ku ktorým majú vývojári prístup prostredníctvom statického prepojenia, reflexie a JNI.

Podľa rovo89 je konečný výsledok týchto dvoch zmien v systéme Android P nasledujúci:

Ak sa tieto potvrdenia zlúčia, znamenalo by to, že aplikácie už nebudú môcť používať/pristupovať k skrytým rozhraniam API triedy, metódy a polia, ktoré sú anotované @hide v AOSP, a preto nie sú súčasťou oficiálne SDK. To by nebol problém pre moduly Xposed, pretože by som mohol tieto potvrdenia ľahko vrátiť späť alebo povoliť modulom prístup k týmto rozhraniam API. Existuje však veľa aplikácií, ktoré využívajú skryté rozhrania API, a tie by zlyhali budúcnosti.

Ďalšie záväzky skutočne ukazujú, že to môže byť to, čo Google plánuje. Toto zaviazať sa uvádza nasledovné:

Zatiaľ čo tento konkrétny commit nebol zlúčený, pretože bol opustený v prospech 3 menších odovzdaní, správa odovzdania popisuje účel týchto zmien. Ďalšia sada zaväzuje ukazujú, že spoločnosť Google navrhne alternatívy vývojárom, ktorí sa snažia používať neverejné rozhrania API:

K niektorým skrytým rozhraniam API však často neexistujú žiadne alternatívy. My v XDA tu môžeme hovoriť zo skúseností žiaľ, táto zmena môže znamenať koniec niektorých inovatívnych aplikácií, alebo si môže vyžadovať, aby niektoré aplikácie zvučných mien znížili ich počet funkčnosť. Táto nadchádzajúca zmena sa v duchu podobá tej nedávnej zásah proti službám dostupnosti (to bolo našťastie pozastavené ako Google vyhodnotil inovatívne použitia). Zatiaľ čo väčšina aplikácií, ktoré využívajú nezdokumentované rozhrania API, to robí z neškodných dôvodov, niektoré aplikácie ich môžu zneužiť na nekalé účely.

Z tohto dôvodu môže spoločnosť Google zablokovať prístup ku všetkým skrytým rozhraniam API v systéme Android P, aby ochránila používateľov pred niekoľkými ľuďmi, ktorí ich zneužívajú. Je ťažké povedať, aký veľký vplyv to môže mať na používateľov, ale ak ste vývojár zvažujete, že sa pozriete cez AOSP, aby ste našli inovatívne použitie skrytého API, potom možno budete chcieť prehodnotiť.


Aktualizácia: Google potvrdzuje

V príspevok v blogu Spoločnosť Google tieto zmeny zverejnila dnes, 28. februára. Google cituje riziká zlyhania pre používateľov a následne núti vývojárov zaviesť núdzové opravy uvádza, že spoločnosť sa postupne posúva smerom k odrádzaniu vývojárov od prístupu bez súpravy SDK rozhrania. Počnúc systémom Android P sa obmedzenia rozšíria tak, aby pokryli jazykové rozhrania Java súpravy SDK.

Spoločnosť uvádza, že „niektoré metódy a polia, ktoré nie sú súčasťou SDK, budú obmedzené“, hoci nešpecifikovali, ktoré z nich budú obmedzené. Spočiatku sa obmedzenie zameria na rozhrania, ktoré sa zriedka používajú, a spoločnosť to na chvíľu povolí vývojárov, aby aj naďalej používali metódy a polia, ktoré nie sú SDK, tam, kde je prechod na metódu SDK technicky podmienený náročné. Obmedzenia sa však časom rozšíria, takže vývojári aplikácií, ktorí používajú metódy bez súpravy SDK, by mali v rámci prípravy na Android P prejsť čo najskôr. Pokiaľ ide o metódy bez alternatívy SDK, spoločnosť Google žiada vývojárov, aby uverejnili svoje príspevky sledovač chýb s ďalšími informáciami.

Ďalšia ukážka pre vývojárov, ktorá zdanlivo dorazí čoskoro, umožní vývojárom otestovať existujúce aplikácie na čiernej listine alebo greyliste pred konečným vydaním.