Android O pārtrauc TYPE_SYSTEM_OVERLAY darbību par labu TYPE_APPLICATION_OVERLAY, kā rezultātā tiek bojātas lietotnes, kas pārklāj statusa joslu.
Tādu ziņu daudzums, kurās izklāstītas jaunas lietotājiem paredzētas funkcijas, kas atrodamas vietnē Android O sāk palēnināties tagad, kad lietotājiem ir bijušas vairākas nedēļas, lai pārbaudītu programmatūru savā ierīcē. Tomēr zem pārsega ir veiktas daudzas, daudzas izmaiņas, kuras lēnām tiek atklātas. Mēs tikai pagājušajā dienā publicējām vienu šādu izmaiņu saistībā ar Nexus un Pixel ierīcēm, kurās darbojas operētājsistēma Android O SDCardFS pieņemšana. Taču šodien mēs vēlamies apspriest izmaiņas, kas ietekmēs noteiktu lietotņu izstrādātājus, jo īpaši tos pārklājums statusa joslas augšpusē. Šķiet, ka šīs lietojumprogrammas ir bojāts Android O izstrādātāja priekšskatījumā, kuru no pirmā acu uzmetiena jūs varētu noraidīt kā vienkāršu kļūdu, taču, iedziļinoties atsauces dokumentācijā, tas var būt paredzētas izmaiņas no Google.
Android O pārtrauc statusa joslas pārklājumus
Viena no manām iecienītākajām Android lietām ir tā pielāgojamība. Lietotāji, kuriem ir saknes tiesības vai kuri izmanto pielāgotus ROM, savas sistēmas statusa joslas var definēt sākotnēji bez ierobežojumiem, taču, ja jūsu ierīcei nav saknes, jums ir mazāk iespēju. Par laimi, Google Play veikalā ir daudz lietojumprogrammu, kas ļauj mainīt statusa joslas izskatu pamata līmenī. Tas ir iespējams, pateicoties gudrai sistēmas pārklājuma Windows kombinācijai, lai parādītu pielāgotu statusa joslu virs esošās, Paziņojumu uztvērēji, lai parādītu paziņojumus, un pēc izvēles pieejamības pakalpojums, lai pielāgotu kontekstuāli tonētu statusa josla.
Divi iepriekš minētie ekrānuzņēmumi parāda, kā izskatītos mana paziņojumu josla, izmantojot kādu no daudzajām statusa joslas pārklājuma lietotnēm, kas pieejamas Play veikalā. Šie ekrānuzņēmumi tika uzņemti ar neiesakņotu Huawei Mate 9, kurā darbojas EMUI 5.0. Tiem no jums, kuri nav pazīstami ar EMUI, statusa josla nelīdzinās iepriekš redzamajiem ekrānuzņēmumiem. Tā vietā tas izskatās šādi:
Ja jūs neiebilstat, kā izskatās jūsu akciju statusa josla, tad tādas lietotnes kā Statuss vai Materiāla statusa josla ir Dieva dāvana. Taču, ja jūsu ierīce tiks atjaunināta uz Android O, šīs lietojumprogrammas var vairs nedarboties. Lūk, kā šīs divas lietotnes izskatās Google Pixel ierīcē, kurā darbojas Android O izstrādātāja priekšskatījums:
Tā vietā, lai pārklājums bloķē sākotnējo statusa joslu, tas izskatās kā pārklājums pārklājas ar sākotnējo statusa joslu, kas rada milzīgu haosu.
Diemžēl tas faktiski padara tādas lietotnes kā šīs bezjēdzīgas. Un tas ietekmē ne tikai jūsu tipiskās statusa joslas tēmu veidošanas lietojumprogrammas - tiek ietekmētas visas programmas, kurām statusa joslas augšpusē ir nepieciešams pārklājums.
Šeit ir saraksts ar dažām populārām lietotnēm, kuras var kļūt nederīgas:
- Statuss (500 000–1 000 000 instalāciju)
- Materiāla statusa josla (1 000 000–5 000 000 instalēšanas gadījumu)
- Foršs rīks — sistēmas statistika (500 000–1 000 000 instalāciju)
- Telecine (50 000–100 000 instalēšanas gadījumu)
- Notīriet statusa joslu (100 000–500 000 instalēšanas gadījumu)
- Tinycore (100 000–500 000 instalēšanas gadījumu)
Un saraksts ar dažām lietotnēm, kas darbosies, bet vairs nevarēs pārklāt statusa joslu (ierobežojot iepriekšējo funkcionalitāti):
- Krēsla (5 000 000–10 000 000 instalēšanas gadījumu)
- HeadsUp (100 000–500 000 instalēšanas gadījumu)
- Resursu monitors Mini (50 000–100 000 instalēšanas gadījumu)
- Mini tīkla monitors (1 000 000–5 000 000 instalēšanas gadījumu)
Play veikalā ir daudz vairāk lietotņu, kas izmanto sava veida pārklājumu statusa joslas augšpusē, taču jau tagad var teikt, ka šādas izmaiņas ietekmēs daudzas lietotnes, kuras izmanto, iespējams, miljoniem lietotājiem. Kas tad te notiek?
TYPE_SYSTEM_OVERLAY darbība tiek pārtraukta
Ar katru jaunu Android iterāciju Google gan ievieš, gan pārtrauc (apzīmē kā novecojušas un noņemamas) dažādas funkcijas. Šoreiz griešanas blokā esošais līdzeklis ir TYPE_SYSTEM_OVERLAY. Citējot atsauces lapa ko šī funkcija piedāvāja izstrādātājiem:
TYPE_SYSTEM_OVERLAY
Logu veids: sistēmas pārklājuma logi, kas jāparāda virs visa pārējā. Šie logi nedrīkst fokusēt ievadi, pretējā gadījumā tie traucēs taustiņslēga darbību. Daudzlietotāju sistēmās tiek rādīts tikai īpašnieka logā.
Būtībā šis loga veids ļauj lietotnei zīmēt virs jebkura ekrāna elementa, tostarp statusa joslas. Tomēr, sākot ar Android O, šis loga veids ir novecojis. Nesistēmas lietotnēm Google iesaka izstrādātājiem izmantot TYPE_APPLICATION_OVERLAY. Citējot atsauces lapa šim jaunajam loga veidam:
TYPE_APPLICATION_OVERLAY
Loga veids: lietojumprogrammu pārklājuma logi tiek parādīti virs visiem darbību logiem (tipi starp
FIRST_APPLICATION_WINDOW
unLAST_APPLICATION_WINDOW
), bet zem kritiskajiem sistēmas logiem, piemēram, statusa joslas vai IME.Sistēma var jebkurā laikā mainīt šo logu pozīciju, izmēru vai redzamību, lai samazinātu lietotāja vizuālo jucekli un pārvaldītu resursus.
Sistēma pielāgos procesu svarīgumu ar šāda veida logiem, lai samazinātu iespēju, ka slepkava ar zemu atmiņu tos nogalinās.
Vairāku lietotāju sistēmās tiek rādīts tikai īpašnieka ekrānā.
Kā redzat, šis jaunais loga veids ļauj lietotnēm pārklāt saturu virs visiem citiem darbību logiem izņemot "kritiskie sistēmas logi, piemēram, statusa josla vai IME" (IME attiecas uz tastatūru). Tas ir piemērots tādām lietotnēm kā Facebook Messenger, jo šīs lietotnes nodrošinātajām tērzēšanas galviņām nav nolūka atrasties statusa joslas augšpusē, taču tas negatīvi ietekmē lielāko daļu iepriekš minēto lietotņu.
Turklāt šobrīd šķiet, ka izstrādātājiem nav risinājuma, ko izmantot. Varētu sagaidīt, ka, lai izvairītos no šīs problēmas operētājsistēmā Android O, izstrādātāji vienkārši veido savas lietotnes, lai tās mērķētu uz SDK 25 (Android 7.1.1). Tomēr, kā norādīja Statusa izstrādātājs vietnē Reddit, Google ir aizstāts TYPE_SYSTEM_OVERLAY ar TYPE_APPLICATION_OVERLAY, un izmaiņas ir neatkarīgi no mērķa SDK versija. Izstrādātājiem, kas izmanto TYPE_SYSTEM_OVERLAY, pašlaik ir jāizmanto TYPE_APPLICATION_OVERLAY, lai uzturētu saderību, tāpēc neatkarīgi no tā, uz kādu mērķa SDK versiju ir balstīta konkrētā lietotne, tā var vairs neizmantojiet TYPE_SYSTEM_OVERLAY operētājsistēmā Android O.
Ko šajā sakarā var darīt?
Nav īsti skaidrs, kāpēc Google ir veikusi šīs izmaiņas, jo viņi vēl nav snieguši oficiālu skaidrojumu. Manuprāt, tas ir mēģinājums uzlabot Android drošību, neļaujot nenojaušajiem lietotājiem nejauši instalēt lietotnes, kas ļaunprātīgi bloķē vai aizstāj viņu statusa joslu. Diemžēl šīs izmaiņas aizskar daudzas pilnīgi likumīgas lietojumprogrammas, kas izmanto TYPE_SYSTEM_OVERLAY.
Izstrādātāji, kas izmanto šo funkciju, ir atvēruši kļūdu ziņojumus Android problēmu izsekotājā (#260787 un #36574245), lai protestētu pret izmaiņām un lūgtu alternatīvu API, taču Google darbinieks komentēja izsekotāju ar sekojošais paziņojums:
Statuss: netiks labots (paredzēta rīcība)
Mēs esam sazinājušies ar produktu un inženieru komandu un saņēmuši ieteikumu, ka izstrādātāji var izmantot SHOW_WHEN_LOCKED darbības, lai rādīt, kad ierīce ir bloķēta, bet to apzināti vairs nav iespējams rādīt bloķēšanas ekrānā/paziņojumu panelī
Pagaidām šķiet, ka šiem izstrādātājiem nav veicies, jo izstrādātāji ir norādījuši, ka FLAG_SHOW_WHEN_LOCKED joprojām neļauj logus pārklāt statusa joslas augšpusē. Nav skaidrs, ko šo lietotņu izstrādātāji var darīt, izņemot lūgt, lai Google maina lietas vai rada elli.
Tā kā šis ir tikai pirmais Android O izstrādātāja priekšskatījums, Google joprojām var mainīt to prātus un nodrošināt šo funkcionalitāti lietotnēm, kuru mērķauditorija nav paredzēta Android O, vai Google var atjaunot TYPE_SYSTEM_OVERLAY. Bet, ja lietas paliek tādas, kādas tās ir pašlaik, varat noskūpstiet šīs lietotnes ardievas. Un tas būtu sasodīti kauns.
Paldies Eli Irvin par daudzu šo lietotņu testēšanu manā vietā!