Kodėl „Google Play“ APK pakeitimas gąsdina kai kuriuos saugos ekspertus

„Google Play“ netrukus privers kūrėjus įkelti „App Bundle“, o ne APK, todėl iškils nepatogių saugumo klausimų dėl reikalavimo.

Praėjusį lapkritį, „Google“ paskelbė kad kūrėjai turės skelbti naujas programas „Play“ parduotuvėje naudodami „Android App Bundle“ (AAB) formatą, o ne APK. Kaip tik kitą dieną „Google“ priminė kūrėjams apie šį būsimą reikalavimą, sukeldama ginčų audrą. iš vartotojų, manančių, kad „Google“ naikina APK, pašalina šalutinį įkėlimą, trukdo trečiųjų šalių programų parduotuvėms ir ką gi.

Tiesa, „Android App Bundle“ yra gana didelis nukrypimas nuo klasikinio APK formato, prie kurio galbūt esate įpratę tiek kaip naudotojas, tiek kaip kūrėjas. Nors „App Bundle“ naudojimas turi nemažai privalumų, kai kurie kūrėjai ir saugos ekspertai pagrįstai nerimauja dėl vieno svarbiausio jų kūrimo aspekto.

Šiame straipsnyje apžvelgsime kritiką, kurią matėme dėl perėjimo prie „Android App Bundle“, taip pat kai kuriuos siūlomus sprendimus, taip pat pakalbėsime apie „Google“ siūlomą šių problemų sprendimą.

Fonas

Tačiau prieš tai įvykstant, turime šiek tiek pakalbėti apie tai, kaip programų platinimas veikia „Android“. Jei jau žinote, kaip veikia programų pasirašymas ir programų rinkiniai, galite praleisti šią dalį.

APK

Dažniausiai „Android“ programos yra platinamos APK failuose. APK yra visas programos kodas ir ištekliai, taip pat kai kurios saugos funkcijos, pvz., pasirašymo aprašas. Kai APK yra įdiegtas, jis iš esmės tiesiog nukopijuojamas į konkretų aplanką ir pridedamas prie vidinės įdiegtų programų duomenų bazės.

APK failo turinį galima naršyti taip pat, kaip ir archyvo failų formatus, pvz., .zip.

Parašai

Diegimo metu tos programos parašas taip pat patikrinamas, siekiant įsitikinti, kad jis galioja. Jei programa jau įdiegta, „Android“ patikrina naujos programos parašą su jau įdiegtu. Jei parašas netinkamas arba nesutampa, „Android“ atsisakys įdiegti programą.

Šis parašo tikrinimas yra svarbi „Android“ saugos dalis. Tai užtikrina, kad jūsų įdiegta programa yra tinkama ir bent jau iš to paties šaltinio, kaip ir ta, kurią jau buvote įdiegę. Pavyzdžiui, jei įdiegiate, tarkime, mano „Lockscreen Widgets“ programa iš „Play“ parduotuvės, galite būti visiškai tikri, kad aš jį pasirašiau ir kad jis autentiškas. Jei bandysite įdiegti „Lockscreen Widgets“ naujinimą iš kokios nors šešėlinės trečiosios šalies svetainės ir tai nepavyks, žinosite, kad kažkas sugadino tą APK, galbūt pridėdamas kenkėjiškų programų.

Raktas, naudojamas programai pasirašyti, yra (idealiu atveju) niekada viešai išleistas. Tai žinoma kaip privatus raktas. Tada privatusis raktas naudojamas sugeneruoti programos paraše rodomą raktą, žinomą kaip viešasis raktas. Tai „Android“ ir programų parduotuvės naudoja programos galiojimui patvirtinti. Aš nesigilinsiu į tai, kaip tiksliai galite sugeneruoti viešąjį raktą neatskleidę privataus rakto, nes tai apima daug šifravimo matematikos. Jei norite daugiau informacijos, patikrinkite „Google“ dokumentai apie APK pasirašymą arba atlikti kai kuriuos vienpusių matematinių funkcijų tyrimus.

Programos pasirašymas, kai tvarkote savo programos pasirašymo raktą. Šaltinis: Google.

Kita programų parašų ypatybė yra galimybė apriboti leidimus tik programoms, turinčioms atitinkamus parašus. „Android“ tai atlieka viduje, naudodama daugybę funkcijų, kai tik programos, pasirašytos tuo pačiu raktu kaip sistema, gali pasiekti tam tikras funkcijas.

Programų rinkiniai

Taigi dabar, kai pateikėme trumpą APK ir parašų apžvalgą, pakalbėkime apie App Bundle. Čia atsiranda APK išteklių. Ištekliai yra tokie dalykai kaip maketai, vaizdai, garsas ir kt. Iš esmės tai viskas, kas nėra kodas. Norėdami geriau palaikyti skirtingas ekrano konfigūracijas ir skirtingas kalbas, kūrėjai gali sukurti kelias to paties šaltinio versijas, kurios naudojamos atsižvelgiant į įrenginį ir kalbą.

Tačiau APK yra visi šie ištekliai, nesvarbu, kuriuos naudojate. Ir jie užima vietą. Atsižvelgiant į programos sudėtingumą, daugeliui įrenginių gali būti daug nepanaudotų išteklių. Tai yra tai, ką išspręsti yra sukurti programų rinkiniai. Kūrėjai gali sugeneruoti „App Bundle“ kaip APK, o tada tą „App Bundle“ galima įkelti į „Play“ parduotuvę, kaip ir APK.

„Android App Bundle“ pavyzdžio turinys, kuriame rodomas vienas pagrindinis modulis, du dinaminių funkcijų moduliai ir du išteklių paketai. Šaltinis: Google.

Tada „Google“ naudoja tą „App Bundle“, kad sugeneruotų daugybę skirtingų APK skirtingų įrenginių konfigūracijoms. Kiekviename programos rinkinyje yra tik tai konfigūracijai reikalingi ištekliai. Kai naudotojas atsisiunčia tą programą, jam pateikiamas sugeneruotas APK, atitinkantis konfigūraciją. Tai padeda sumažinti programų atsisiuntimo ir diegimo dydžius, sutaupant pralaidumo ir saugyklos vietos.

Grafikas, rodantis, kaip dinamiškas pristatymas gali sumažinti įrenginyje įdiegtų išteklių kiekį. Šaltinis: Google.

Žinoma, įdiegus jūsų įrenginiui skirtą APK, jums bus sunkiau tiesiog nukopijuoti jį į kitą įrenginį ir be problemų įdiegti. Priklausomai nuo jūsų perspektyvos, tai gali būti geras arba blogas dalykas. Viena vertus, tai apsunkina piratavimą, nes vartotojai nebeturi visos programos. Kita vertus, dėl tos pačios priežasties tampa sudėtingiau teisėtai archyvuoti programas.

Programėlės pasirašymas

Kadangi „Android App Bundle“ nėra APK, negalite tiesiog atidaryti AAB failo ir įdiegti jį tiesiai įrenginyje. Kai įkeliate vieną į „Play“ parduotuvę, „Google“ naudoja paketą skirtingiems (nepasirašytiems) APK failams generuoti. Tada tie APK turi būti pasirašyti, kad juos būtų galima įdiegti.

Užuot prašydama kūrėjo pasirašyti ir iš naujo įkelti tuos sugeneruotus APK, „Google“ tvarko pati pasirašymą. „Play“ parduotuvė arba naudoja naują sukurtą raktą, arba paprašo kūrėjo rakto, kurį jie naudoja pasirašydami APK. Pasirinkus bet kurią parinktį, „Google“ tvarko kūrėjo viešą pasirašymą ir pateikia įkėlimą Raktas. „Google“ naudoja įkėlimo raktą vidiniam patvirtinimui ir užtikrina, kad kūrėjo įkeliamas „App Bundle“ (arba kai kuriais atvejais APK) yra tinkamas.

Programos pasirašymas naudojant „Play App Signing“. Šaltinis: Google

Jei įkėlimo raktas pažeistas arba pamestas, kūrėjai gali paprašyti naujo, o pasirašymo raktas, naudojamas programai platinti, lieka nepakitęs.

Yra daug daugiau, susijusių su programų pasirašymu, bet tai yra svarbiausia šiame straipsnyje. Jei norite, galite perskaityti daugiau apie programų rinkinius ir programų prisijungimą šis Wojtek Kaliciński „Medium“ straipsnis.

Kritika

Teoriškai ir praktiškai „App Bundle“ yra gana puikūs. Jie sumažina duomenų naudojimą ir diegimo dydį – vartotojui nieko nereikia daryti. Tačiau dėl to, kaip jis įgyvendinamas, kai kurie kūrėjai ir saugumo tyrinėtojai per pastaruosius kelis mėnesius išreiškė susirūpinimą. Prieš apibendrindamas šiuos rūpesčius, noriu šiek tiek pasakyti, kad dauguma to, kas parašyta toliau, yra tiesiogiai remiantis straipsnių serija kūrėjas Markas Murphy iš CommonsWare. Būtinai peržiūrėkite jo straipsnius, nes juose pateikiama daugiau informacijos ir kritikos kūrėjo požiūriu.

Saugumas

Klasikiniame platinimo modelyje kūrėjas saugo raktą, kurį naudoja pasirašydamas APK, privatų. Jis niekada nėra bendrinamas su visuomene ir tik įgalioti žmonės turėtų turėti prieigą prie jo. Taip užtikrinama, kad tik tie žmonės galėtų sugeneruoti tinkamą APK.

Tačiau jei „Play“ parduotuvėje naudojate „App Bundle“, „Google“ valdo raktą, kuriuo pasirašomi naudotojų gaunami APK. The numatytas elgseną naujoms programoms, įkeltoms į „Google Play“. nuo 2021 m. rugpjūčio mėn „Google“ turi sukurti savo platinimo raktą, kurį ji saugo nuo kūrėjo.

Apibendrinkite, kas keičiasi „Google Play“ kūrėjams nuo 2021 m. rugpjūčio mėn. Šaltinis: Google

Kūrėjai pateikia naujų programų pagal numatytuosius nustatymus „Google“ tvarkys jų privatųjį raktą, nors kūrėjai pateiks naujinimus esamas programas gali toliau naudoti APK arba jie gali pereiti prie AAB platinimo sugeneruodami naują raktą, kurį „Google“ naudos naujiems naudotojams. Esamos programos nėra privalomi norėdami pereiti nuo APK platinimo prie „Android App Bundle“, nors ši parinktis jiems yra prieinama, jei pasirinks. Po tam tikro atstūmimo „Google“. netgi leis tai padaryti įkelti savo privatų raktą, kad „Google“ galėtų prisijungti prie naujų ir esamų programų. Nė viena iš šių situacijų nėra ideali, nes kad ir kaip būtų, „Google“ turės prieigą prie jūsų privataus rakto, jei to norėsite naudoti Android App Bundle (ir kūrėjai neturi kito pasirinkimo, jei nori pateikti naują programą po rugpjūčio mėn.). 2021!)

Nors esame įsitikinę, kad „Google“ labai rimtai žiūri į saugumą, Žemėje nėra įmonės, kuri būtų apsaugota nuo duomenų pažeidimų. Jei raktas, kurį „Google“ naudoja pasirašydama jūsų programą, kad ji būtų platinama, yra viename iš šių pažeidimų, bet kas gali pasirašyti jūsų programos versiją ir padaryti ją taip, lyg ją pasirašėte jūs. Kai kurie kūrėjai ir saugumo ekspertai nėra patenkinti tokia galimybe. Taip, tai labai, labai menka galimybė, bet faktas, kad tokia galimybė yra, kai kuriuos iš infosec bendruomenės gąsdina.

Jei kūrėjai pasirašo „Android“ APK, bet kas gali patvirtinti APK iš „Google Play“, aklas pasitikėjimas nebūtinas. Tai elegantiškas dizainas, užtikrinantis patikrintą saugumą. „App Bundles“ paverčia tai ant galvos ir atrodo, kad jų struktūra skatina pardavėjo užsiblokavimą. Yra daug alternatyvių techninių metodų, kurie suteiktų mažus APK, kuriuos vis dar pasirašo kūrėjai, tačiau jie neteiktų pirmenybės „Play“. Pavyzdžiui, kūrėjas gali sugeneruoti ir pasirašyti visus APK variantus, tada įkelti į bet kurią programų parduotuvę.

Tikrai yra argumentų, ar geriau saugią privačių raktų saugojimą palikti „Google“ ar atskirų kūrėjų rankose. Tačiau tie kūrėjai (tikriausiai) savo raktams paprastai nenaudoja centrinės saugyklos. Priverčiant kūrėjus naudoti „Play App Signing“, kenkėjiškam užpuolikui tereikia vieną kartą pažeisti „Google“ saugą, kad gautų tūkstančius ar milijonus raktų.

Ko verta, štai ką „Google“ sako apie tai, kaip ji apsaugo jūsų pasirašymo raktą savo infrastruktūroje:

[blockquote author="Wojtek Kaliciński, "Android" kūrėjų advokatas, Google"]Kai naudojate „Play App Signing“, jūsų raktai saugomi toje pačioje infrastruktūroje, kurią „Google“ naudoja savo raktams saugoti.

Prieigai prie rakto taikomos griežtos ACL ir klastojimo akivaizdžios visų operacijų audito sekos.

Visi objektai, sukurti ir pasirašyti naudojant kūrėjo raktą, yra pasiekiami sistemoje „Google Play Console“, kad galėtumėte juos patikrinti / patvirtinti.

Be to, norėdami išvengti rakto praradimo, labai dažnai darome atsargines pirminės saugyklos kopijas. Šios atsarginės kopijos yra stipriai užšifruotos ir mes reguliariai tikriname atkūrimą iš šių atsarginių kopijų.

Jei norite sužinoti apie „Google“ techninę infrastruktūrą, skaitykite „Google“ debesies saugos dokumentai.[/blockquote]

Kad ir kaip būtų puiku, visi garsai vis tiek įmanomi praradimo ir vagystės. O audito sekos tik padeda išvengti būsimų atakų; jie neatgaus sulaužytų raktų.

Neleistinų modifikacijų galimybė

Viena didelių problemų, susijusių su tuo, kaip „Google“ nustatė „App Bundles“, yra galimybė, kad programai gali būti pridedami neteisėti pakeitimai. APK ištraukimas iš „App Bundle“ iš esmės apima pakeitimus, nes „Google“ turi neautomatiškai sukurti kiekvieną APK. Nors „Google“ pažadėjo, kad ji neįveda ir nekeis kodo, „App Bundle“ proceso problema yra ta, kad jis turi galią tai padaryti.

Štai keli pavyzdžiai, ką „Google“ užimanti įmonė gali padaryti:

Tarkime, kad yra saugi pranešimų siuntimo programa, kurią žmonės naudoja bendraudami nerizikuodami dėl vyriausybės priežiūros. Tai gali būti neįtikėtinai naudinga priemonė žmonėms, protestuojantiems prieš autoritarinę vyriausybę, ar net žmonėms, kurie tiesiog nori išsaugoti savo privatumą. Ši vyriausybė, norėdama matyti, ką sako programos naudotojai, galėtų pabandyti priversti „Google“ įtraukti stebėjimo užpakalines duris į programos kodą.

Šis pavyzdys yra šiek tiek nekenksmingesnis, tačiau kai kuriems žmonėms tai taip pat kelia nerimą. Tarkime, kad yra programa, kuri sulaukia milijonų atsisiuntimų per dieną, tačiau joje nėra jokių skelbimų ar analizės. Tai didžiulis duomenų šaltinis, neturintis galimybės prieiti prie tų duomenų. „Google“, būdama reklamos įmonė, gali norėti pasiekti šiuos duomenis.

Klasikiniame programų platinimo APK modelyje „Google“ negali keisti programų nepakeitusi parašo. Jei „Google“ pakeis parašą, ypač populiarioje programoje, žmonės pastebės, nes naujinys nebus įdiegtas. Tačiau naudodama „App Bundle“ ir „App Signing“ „Google“ galėjo tyliai įvesti savo kodą į programas, prieš jas platindama. Parašas nepasikeis, nes „Google“ priklausys pasirašymo raktas.

Klasikinėje APK platinimo schemoje atnaujintas APK failas turi būti pasirašytas tuo pačiu raktu, naudotu pasirašant originalų APK. Idealiu atveju šį raktą turi tik individualus kūrėjas. Šaltinis: Zachary Wander.

Kad būtų aišku, šių pavyzdžių neįtikėtinai mažai tikėtina. „Google“ linkusi paprastai iš viso pasitraukti iš varginančių rinkų, o ne prisitaikyti. Bet nors tai mažai tikėtina, vis tiek įmanoma. Vien todėl, kad įmonė žada, kad kažkas neįvyks, ji to negarantuoja.

Kodo skaidrumas

„Google“, išgirdusi šiuos rūpesčius, šią savaitę pristatė naują funkciją, pavadintą Programų rinkinių kodo skaidrumas. Kodo skaidrumas leidžia kūrėjui iš esmės sukurti antrą parašą, kuris vartotojams pateikiamas kartu su programa. Šis papildomas parašas turėtų būti sukurtas naudojant atskirą privatų raktą, prie kurio turi prieigą tik kūrėjas. Tačiau šis metodas turi tam tikrų apribojimų.

Kaip veikia „Android App Bundle“ kodo skaidrumas. Šaltinis: Google

Kodo skaidrumas apima tik kodą. Tai gali atrodyti akivaizdu, atsižvelgiant į pavadinimą, tačiau tai taip pat reiškia, kad tai neleidžia vartotojams patikrinti išteklių, aprašo ar bet ko kito, kas nėra DEX failas ar vietinė biblioteka. Nors kenkėjiškos nekoduotų failų modifikacijos paprastai turi daug mažesnį poveikį, tai vis tiek yra programos saugumo spraga.

Kita su Kodo skaidrumu susijusi problema yra ta, kad nėra įgimto patvirtinimo. Vienam, tai pasirenkama funkcija, todėl kūrėjai turi nepamiršti jo įtraukti į kiekvieną naują įkeliamą APK. Šiuo metu tai turi būti padaryta iš komandinės eilutės ir naudojant versiją bundletool kurios nėra su „Android Studio“. Net kai kūrėjas jį įtraukia, „Android“ neturi jokio patvirtinimo, kad patikrintų, ar Code Transparency aprašas atitinka programoje esantį kodą.

Galutinis naudotojas turi pats patikrinti, palygindamas aprašą su viešuoju raktu, kurį gali pateikti kūrėjas, arba nusiųsdamas APK kūrėjui patvirtinti.

Nors Kodo skaidrumas leidžia patvirtinti, kad joks programos kodas nėra pakeistas, jis neapima jokių kitų programos dalių patvirtinimo. Taip pat nėra būdingo pasitikėjimo procesu. Galite ginčytis, kad jei nepasitikite „Google“, tikriausiai atliksite savarankiško patikrinimo užduotį, bet kodėl turėtumėte tai padaryti?

Yra ir kitų problemų, susijusių su Kodo skaidrumo funkcija, pvz nurodė Mark Murphy iš CommonsWare. Rekomenduoju perskaityti jo straipsnį, kad galėtumėte išsamiau išanalizuoti funkciją.

Kūrėjo patogumas ir pasirinkimas

Trečioji (ir paskutinė šiame straipsnyje) priežastis, dėl kurios kai kurie kūrėjai nesutaria dėl programų rinkinių, yra sumažėjęs patogumas ir pasirinkimas.

Jei kūrėjas sukuria naują programą „Play“ parduotuvėje po to, kai „Google“ pradeda reikalauti „App Bundle“ ir jis pasirenka numatytoji parinktis leisti „Google“ tvarkyti pasirašymo raktą, jie niekada neturės prieigos prie to pasirašymo Raktas. Jei tas pats kūrėjas norės tą programą platinti kitoje programų parduotuvėje, jis turės naudoti savo raktą, kuris nesutaps su Google.

Tai reiškia, kad vartotojai turės įdiegti ir atnaujinti iš „Google Play“ arba iš trečiųjų šalių šaltinių. Jei jie nori pakeisti šaltinį, jie turi visiškai pašalinti programą, galinčią prarasti duomenis, ir įdiegti iš naujo. APK agregatoriams patinka APKMirror tada taip pat teks susidurti su keliais oficialiais parašais toje pačioje programėlėje. (Techniškai jie jau turi tai padaryti, nes programų pasirašymas leidžia sukurti naują, saugesnį raktą naujiems naudotojams, bet jiems ir kitoms svetainėms bus blogiau, kai visi turi padaryti tai.)

„Google“ atsako į šią problemą – „Play Console“ naudoja „App Bundle Explorer“ arba „Artefaktų naršyklę“, kad atsisiųstų gautus APK iš įkelto rinkinio. Panašiai kaip kodo skaidrumas, tai nėra išsamus sprendimas. Iš „Play Console“ atsisiųsti APK bus suskirstyti pagal skirtingus įrenginių profilius. Nors „Play Console“ palaiko kelių vienos programos versijos APK įkėlimą, daugelis kitų platinimo kanalų nepalaiko.

Taigi, kai kūrėjai valdo kelias parduotuves, daugelis „App Bundle“ naudojimo pranašumų išnyksta, o tai apsunkina platinimą. Su žinia, kad Windows 11 yra gauti Android programos palaikymą „Amazon Appstore“ dėka kai kurie mano, kad „App Bundles“ reikalavimas atgrasys kūrėjus nuo platinimo „Amazon“. Žinoma, „Google“ pirmiausia rūpinasi savo programų parduotuve, bet būtent tai nuleido juos į karštą vandenį su konkurentais vedantis juos gaminti nedideli, taikinantys pokyčiai kaip trečiųjų šalių programų parduotuvės veikia „Android“.

Keletas su keliomis parduotuvėmis susijusių problemų yra programų tarpusavio ryšys ir greitas bandymas.

Pradėkime nuo programų tarpusavio ryšio. Ar kada nors atsisiuntėte programą, kuri užrakina funkcijas už mokamos sienos? Beveik neabejotinai. Kai kurie kūrėjai priskiria funkcijas pirkdami programoje, tačiau kiti gali nuspręsti sukurti atskirą mokamą programą. Kai ši priedo programa bus įdiegta, pagrindinės programos funkcijos atrakinamos.

Bet kas neleidžia kam nors tiesiog įdiegti priedo iš piratų šaltinio? Na, kūrėjams yra daug galimybių, tačiau bent viena apima parašu apsaugotų leidimų naudojimą. Tarkime, kad pagrindinė programa deklaruoja parašu apsaugotą leidimą. Tada priedo programa pareiškia, kad nori naudoti tą leidimą. Idealiu atveju priedo programėlėje taip pat bus tam tikra licencijos tikrinimo funkcija, kuri prisijungia prie interneto, kad įsitikintų, jog vartotojas yra teisėtas.

Jei abi programos turi tą patį parašą, „Android“ suteiks leidimą priedo programai ir apsaugos nuo piratavimo patikrinimai bus atlikti. Jei priedo programa neturi tinkamo parašo, leidimas nebus suteiktas ir patvirtinimas nepavyks.

Naudodamas klasikinį APK platinimo modelį, vartotojas gali gauti bet kurią programą iš bet kurio teisėto šaltinio ir su ja dirbti. Naudojant dabartinį numatytąjį „App Bundle“ modelį, pagrindinės ir papildomos programos parašai nesutaps. „Google“ kiekvienai programai sukurs unikalų raktą. Kūrėjas visada gali atsisakyti parašu apsaugoto leidimo ir naudoti tiesioginį parašo maišos patikrinimą, tačiau tai yra daug mažiau saugu.

Ir tada yra greitojo gaisro bandymai. Naudotojai nuolat siunčia el. laiškus kūrėjams apie jų programų problemas. Kartais šias problemas galima išspręsti paprastai: atkurkite problemą, suraskite problemą, ją ištaisykite ir įkelkite naują versiją. Bet kartais jų nėra. Kartais kūrėjai negali atkurti problemos. Jie gali išspręsti, jų nuomone, problemą, bet tada vartotojas turi tai išbandyti. Dabar tarkime, kad vartotojas įdiegė programą per „Google Play“.

Naudodamas APK modelį, kūrėjas gali pakeisti tam tikrą kodą, sukurti ir pasirašyti naują APK ir išsiųsti jį vartotojui išbandyti. Kadangi bandomojo APK parašas sutampa su vartotojo įdiegtu, tai paprastas procesas, kurį reikia atnaujinti, išbandyti ir pranešti apie tai. Naudojant „App Bundle“ tai sugenda. Kadangi „Google“ pasirašo naudotojo iš pradžių įdiegtą APK, jis neatitiks kūrėjo siunčiamo APK parašo. Jei ši programa bus paskelbta pasibaigus App Bundles galutiniam terminui, kūrėjas net neturės prieigos prie „Google“ naudojamų raktų. Kad galėtų išbandyti, vartotojas turės pašalinti dabartinę programą prieš įdiegdamas bandomąją versiją.

Čia yra krūva problemų. Pirma, yra nepatogumų tiek kūrėjui, tiek naudotojui. Pašalinti programą tik norint išbandyti pataisymą nėra smagu. O kas, jei problema išnyks? Ar tai buvo kūrėjo atlikti pakeitimai, ar vartotojas veiksmingai išvalė programos duomenis? „Play“ parduotuvėje yra vidinis testavimas, kuris turėtų leisti kūrėjams greitai sukurti ir platinti, tačiau tam reikia, kad vartotojas pirmiausia pašalintų leidimo versiją. Tai tikrai nieko nepataiso.

Jei visa tai skamba kaip daugybė hipotetinių nesąmonių, čia yra labai tikras pavyzdys kūrėjo, kuris turės šių problemų, jei leis „Google“ sugeneruoti jiems privatų raktą: João Dias. Jis yra „Tasker“ kūrėjas kartu su daugybe papildinių programų, įskaitant „AutoApps“ rinkinį. Dėl naujų programų rinkinių reikalavimo João kūrimo ciklas gali tapti daug sudėtingesnis, bent jau naujoms programoms. Tiesiogiai siųsti bandomąsias versijas bus mažiau patogu. Licencijų tikrinimas bus ne toks efektyvus.

João Dias prižiūri daug programų, kurios visos remiasi bendra licencija. Jei yra du pasirašymo raktai, jam viskas gali būti labai sudėtinga.

Tai gali atrodyti šiek tiek perdėtai, bet neatrodo, kad João yra mažas kūrėjas ir tikėtina, kad jis nėra vienas. „Play“ parduotuvėje yra daug programų, kurios remiasi parašo patvirtinimu, kad aptiktų neteisėtus vartotojus.

Žinoma, įdiegus naują galimybę kūrėjams į Google įkelti savo pasirašymo raktus, šios problemos bent kiek palengvėjo. Tačiau kūrėjai turi pasirinkti, kad įgalintų parinktį kiekvienai programai. Jei to nepadarys, sujungimai nepavyks, o greitam palaikymui reikės įkelti rinkinį į „Google“ ir palaukti, kol bus sugeneruoti APK, prieš išsiunčiant tinkamą vartotojui. Be to, tai vis tiek reiškia, kad jie turi dalytis savo privačiu raktu, o tai sugrąžina mus prie anksčiau aptartų rūpesčių.

Sprendimai

Tai sena problema, nes „App Bundle“ reikalavimai buvo paskelbti prieš kelis mėnesius, todėl buvo pasiūlyta nemažai sprendimų.

Vienas iš sprendimų yra išvengti „Play App Signing“ poreikio. Užuot sukūrus „App Bundle“, kurį „Google“ apdoroja į APK ir ženklus, tą apdorojimą gali atlikti „Android Studio“. Tada kūrėjai gali tiesiog įkelti ZIP, pilną vietoje pasirašytų APK kiekvienai konfigūracijai, kurią būtų sugeneravusi „Google“.

Naudojant šį sprendimą, „Google“ visai nereikės prieigos prie kūrėjų raktų. Procesas būtų labai panašus į klasikinį APK platinimo modelį, bet apimtų kelis mažesnius APK, o ne vieną.

Programos pasirašymas „Android Studio“ naudojant savo įkėlimo raktą. Šaltinis: Google

Kitas sprendimas – tiesiog nereikalauti naudoti „App Bundle“ ir toliau leisti kūrėjams įkelti vietoje pasirašytus APK. Nors App Bundles gali daugeliu atvejų būtų geresnė naudotojo patirtis, kai kurioms programoms iš tikrųjų nenaudinga, kad jos yra suskirstytos pagal konfigūraciją ir minimalaus dydžio sumažinimas.

Jei „Google“ įdiegė abu šiuos sprendimus, kūrėjui, norinčiam naudoti „App Bundle“, nereikės per prisijungimą prie „Google“, o kūrėjas, kurio programa neturės daug naudos iš formato, neturės jo naudoti visi.

„Google“ atsakymai

Savarankiškas pasirašymas

Kai pirmą kartą jų buvo paklausta, ar leisti kūrėjams pasirašyti programų paketus, „Google“ atsakymas buvo labai neįpareigojantis:

[blockquote author=""]Taigi, trumpai pakalbėjau apie reikalavimą, kad kitais metais naujoms programoms būtų naudojami programų paketai, ir vienas dalykas, kuris susijęs su tuo, yra tas, kad išplėtus reikės „Play App Signing“. Taigi kūrėjai turės arba sugeneruoti programos pasirašymo raktą sistemoje „Play“, arba įkelti savo raktą į „Play“, nes tai yra būtina programų paketų sąlyga. Iš kūrėjų girdėjome, kad kai kurie iš jų tiesiog nenori to daryti. Jie nenori, kad raktai būtų valdomi „Play“. Ir šiuo metu tai neįmanoma, jei norite naudoti programų paketus.

Tačiau išgirdome tokius atsiliepimus ir... Šiuo metu negaliu apie nieką kalbėti, neturime ką paskelbti, bet ieškome, kaip galėtume sumažinti kai kuriuos iš šių rūpesčių. Tai nebūtinai turi leisti pasilikti savo raktą įkeliant paketus. Mes ieškome įvairių variantų. Tiesiog šiuo metu neturime sprendimo paskelbti. Tačiau iki reikalavimo dar liko maždaug metai, todėl labai tikiuosi, kad turėsime atsakymą kūrėjams.[/blockquote]

Tai buvo praėjusių metų lapkričio pabaigoje, ir atrodo, kad nieko neįvyko. Likus vos keliems mėnesiams iki Įsigalios programų rinkinių reikalavimas, kūrėjams vis dar nėra būdo, kaip pasirašyti savo programas. Nors „Google“ dabar tai leido įkelti savo raktą tiek naujoms, tiek esamoms programoms, tai vis tiek pašalina pasirašymo dalį iš kūrėjo rankų.

Kodo pakeitimai

Nors „Google“ konkrečiai pažadėjo, kad „Play“ parduotuvė nekeis programos kodo, pažadas nėra garantija. Naudojant programų rinkinius ir programų pasirašymą, nėra jokių techninių apribojimų, kurie neleistų „Google“ keisti įkeltų programų prieš platinant.

Google pristatė Kodo skaidrumas kaip pasirenkama funkcija, ir nors tai šiek tiek padeda, joje kyla nemažai problemų, kaip aptarėme anksčiau.

Savarankiškai pagaminti ryšuliai

Kai „Google“ buvo paklausta, ar leisti kūrėjams kurti savo programų paketus (ZIP, kuriuose yra padalintų APK), atsakymas iš esmės buvo „mes to nedarysime“:

Tikriausiai ne taip, kaip aprašyta klausime, nes tai dar labiau apsunkintų leidybos procesą kūrėjams, o mes iš tikrųjų norime jį padaryti paprastesnį ir saugesnį. Tačiau vėlgi išgirdome šį atsiliepimą ir ieškosime galimybių, kaip tai padaryti, tačiau tikriausiai ne taip, kaip aprašyta čia.

Įdomu tai, kad „Google“ pagrindžia, kad tai apsunkintų publikavimą. Tačiau „Google“ vis tiek galėtų automatizuoti procesą kaip „Android Studio“ APK generavimo dialogo lango dalį. Be to, jei atitinkama programa platinama keliose parduotuvėse, ji iš tikrųjų padarytų paskelbimo procesas paprastesnis, nes kūrėjams nereikės tvarkyti kelių pasirašymo raktų ir skundų iš vartotojų.

Įdiegus kodo skaidrumą, atrodo, kad komplikacijos vis dėlto nėra problema. Kodo skaidrumas bent jau kol kas reikalauja, kad kūrėjas naudotų komandinės eilutės įrankį, o vartotojai aiškiai patikrintų jiems teikiamos programos galiojimą. Tai sudėtingiau nei savarankiškas paketų kūrimo procesas, ir neaišku, kodėl „Google“ teikia pirmenybę būtent šiam sprendimui.

Eiti į priekį

„App Bundle“ bus būtinas platinimo formatas naujoms programoms, pateiktoms „Google Play“ nuo rugpjūčio 1 d. Nors „Google“ bent kiek išsprendė daugumą kūrėjų ir saugos ekspertų iškeltų problemų, atsakymai palieka daug norimų rezultatų. „App Bundle“ kaip naujos kartos platinimo formatas turi daug akivaizdžių pranašumų, tačiau visada išliks problemų dėl dalinės ar visiškos programos pasirašymo kontrolės suteikimo „Google“.

„Google“ atsakymai ir pastangos tikrai vertinami, tačiau kai kurie, pavyzdžiui, Markas Murphy, mano, kad nuėjo per mažai. Tokie sprendimai, kaip pačių sukurti paketai, neįdiegti, o „Android App Bundle“ galutinis terminas reikalaujamas greitai neatrodo, kad „Google Play“ kūrėjai ilgą laiką galės visiškai valdyti savo programas ilgiau.


Vėliau šią popietę „Twitter“ erdvėje kalbėsime apie „Android App Bundle“ reikalavimo pasekmes, todėl prisijunkite prie mūsų!