Google Play მალე აიძულებს დეველოპერებს ატვირთონ App Bundles APK-ების ნაცვლად, რაც გამოიწვევს უსაფრთხოების არასასიამოვნო კითხვებს მოთხოვნასთან დაკავშირებით.
გასული წლის ნოემბერში, Google-მა გამოაცხადა რომ დეველოპერებს მოეთხოვებათ ახალი აპების გამოქვეყნება Play Store-ზე Android App Bundle-ის (AAB) ფორმატის გამოყენებით APK-ის ნაცვლად. სულ ცოტა ხნის წინ, Google-მა შეახსენა დეველოპერებს ეს მომავალი მოთხოვნა, რამაც გამოიწვია დაპირისპირების ქარიშხალი მომხმარებლებისგან, რომლებსაც სჯერათ, რომ Google კლავს APK-ებს, გამორიცხავს გვერდითი დატვირთვას, აფერხებს მესამე მხარის აპების მაღაზიებს და რა არა.
მართალია, Android App Bundles საკმაოდ შორს არის კლასიკური APK ფორმატისგან, რომელსაც შეიძლება შეჩვეული იყოთ, როგორც მომხმარებელი, ასევე დეველოპერი. მიუხედავად იმისა, რომ აპლიკაციების პაკეტების გამოყენებას საკმაოდ ბევრი სარგებელი მოაქვს, მათი დამზადების ერთი ძირითადი ასპექტია, რომელიც სამართლიანად აწუხებს დეველოპერებსა და უსაფრთხოების ექსპერტებს.
ამ სტატიაში ჩვენ გავაშუქებთ კრიტიკას, რომელიც ვნახეთ Android App Bundles-ზე გადასვლის, ასევე რამდენიმე შემოთავაზებულ გადაწყვეტაზე და ასევე ვისაუბრებთ Google-ის მიერ ამ პრობლემების შემოთავაზებულ გადაწყვეტაზე.
ფონი
სანამ ეს მოხდება, ცოტა უნდა ვისაუბროთ იმაზე, თუ როგორ მუშაობს აპლიკაციების განაწილება ზოგადად Android-ზე. თუ უკვე იცით, როგორ მუშაობს აპის ხელმოწერა და აპლიკაციების პაკეტები, შეგიძლიათ გამოტოვოთ ეს ნაწილი.
APK-ები
უმეტესწილად, აპები Android-ზე ნაწილდება APK ფაილებში. APK შეიცავს აპის ყველა კოდს და რესურსს, უსაფრთხოების ზოგიერთ ფუნქციას, როგორიცაა ხელმოწერის მანიფესტი. როდესაც APK დაინსტალირებულია, ის ძირითადად კოპირდება კონკრეტულ საქაღალდეში და ემატება დაინსტალირებული აპების შიდა მონაცემთა ბაზას.
ხელმოწერები
ინსტალაციის დროს, ამ აპლიკაციის ხელმოწერა ასევე მოწმდება, რათა დარწმუნდეს, რომ ის მოქმედებს. თუ აპი უკვე დაინსტალირებულია, Android ამოწმებს ახალი აპის ხელმოწერას უკვე დაინსტალირებულის წინააღმდეგ. თუ ხელმოწერა არასწორია ან არ ემთხვევა, Android უარს იტყვის აპის ინსტალაციაზე.
ხელმოწერის შემოწმება Android-ის უსაფრთხოების მნიშვნელოვანი ნაწილია. ის დარწმუნდება, რომ აპი, რომელსაც თქვენ აინსტალირებთ, არის მოქმედი და სულ მცირე იმავე წყაროდან, როგორც უკვე დაინსტალირებული. მაგალითად, თუ დააინსტალირეთ, თქვით, ჩემი Lockscreen Widgets აპი Play Store-დან, შეგიძლიათ გონივრულად დარწმუნებული იყოთ, რომ მე ვარ ის, ვინც მას მოაწერა ხელი და რომ ის ავთენტურია. თუ შემდეგ ცდილობთ დააინსტალიროთ Lockscreen Widgets-ის განახლებები მესამე მხარის დაჩრდილული საიტიდან და ეს ვერ მოხერხდა, გეცოდინებათ, რომ ვიღაცამ შეცვალა ეს APK, შესაძლოა მავნე პროგრამის დასამატებლად.
აპის ხელმოწერისთვის გამოყენებული გასაღები არის (იდეალურად) არასოდეს საჯაროდ გაათავისუფლეს. ეს ცნობილია როგორც პირადი გასაღები. შემდეგ პირადი გასაღები გამოიყენება აპის ხელმოწერაში ნაჩვენები გასაღების გენერირებისთვის, რომელიც ცნობილია როგორც საჯარო გასაღები. ეს არის ის, რასაც Android და აპლიკაციების მაღაზიები იყენებენ აპის მოქმედების დასადასტურებლად. მე არ გავიგებ, თუ როგორ შეგიძლიათ შექმნათ საჯარო გასაღები პირადი გასაღების გამოვლენის გარეშე, რადგან ის მოიცავს უამრავ დაშიფვრის მათემატიკას. თუ გსურთ მეტი დეტალი, შეამოწმეთ Google-ის დოკუმენტაცია APK-ების ხელმოწერის შესახებ ან ჩაატარეთ კვლევა ცალმხრივი მათემატიკის ფუნქციებზე.
აპლიკაციის ხელმოწერების კიდევ ერთი მახასიათებელია ნებართვების შეზღუდვის შესაძლებლობა მხოლოდ შესაბამისი ხელმოწერების მქონე აპებისთვის. Android ამას აკეთებს შინაგანად მრავალი ფუნქციისთვის, სადაც მხოლოდ აპებს, რომლებიც ხელმოწერილია იმავე გასაღებით, როგორც ფრეიმორი, შეუძლია წვდომა გარკვეულ ფუნქციებზე.
აპების პაკეტები
ახლა, როდესაც ჩვენ მივეცით APK-ების და ხელმოწერების სწრაფი მიმოხილვა, მოდით ვისაუბროთ App Bundles-ზე. აქ შემოდის APK რესურსები. რესურსები არის ისეთი რამ, როგორიცაა განლაგება, სურათები, აუდიო და ა.შ. ძირითადად, ისინი არის ყველაფერი, რაც არ არის კოდი. დისპლეის სხვადასხვა კონფიგურაციისა და სხვადასხვა ენების უკეთ მხარდასაჭერად, დეველოპერებს შეუძლიათ შექმნან ერთი და იგივე რესურსის მრავალი ვერსია, რომლებიც გამოიყენება მოწყობილობისა და ენის მიხედვით.
მაგრამ APK-ში ყველა ეს რესურსი არსებობს, არ აქვს მნიშვნელობა რომელს იყენებთ. და ისინი ადგილს იკავებენ. თქვენი აპლიკაციის სირთულიდან გამომდინარე, შეიძლება იყოს ბევრი გამოუყენებელი რესურსი მრავალი მოწყობილობისთვის. სწორედ ამის გადასაჭრელად არის შექმნილი App Bundles. დეველოპერებს შეუძლიათ შექმნან App Bundle ისევე, როგორც APK, და ეს App Bundle შეიძლება აიტვირთოს Play Store-ში, ისევე, როგორც APK-ს შეუძლია.
შემდეგ Google იყენებს ამ App Bundle-ს სხვადასხვა APK-ების მთელი რიგის შესაქმნელად სხვადასხვა მოწყობილობის კონფიგურაციისთვის. თითოეული App Bundle შეიცავს მხოლოდ ამ კონფიგურაციისთვის საჭირო რესურსებს. როდესაც მომხმარებელი მიდის ამ აპის ჩამოტვირთვაზე, მას ემსახურება გენერირებული APK, რომელიც შეესაბამება მათ კონფიგურაციას. ეს ხელს უწყობს აპლიკაციების ჩამოტვირთვისა და ინსტალაციის ზომის შემცირებას, გამტარუნარიანობის და შენახვის სივრცის დაზოგვას.
რა თქმა უნდა, თქვენი მოწყობილობისთვის სპეციფიკური APK-ის ინსტალაცია ნიშნავს, რომ თქვენთვის უფრო რთულია უბრალოდ დააკოპიროთ იგი სხვა მოწყობილობაზე და დააინსტალიროთ უპრობლემოდ. თქვენი პერსპექტივიდან გამომდინარე, ეს შეიძლება იყოს კარგი ან ცუდი. ერთის მხრივ, ეს ართულებს მეკობრეობას, რადგან მომხმარებლებს აღარ აქვთ მთელი აპლიკაცია. მეორეს მხრივ, ეს ართულებს აპების კანონიერად დაარქივებას, იგივე მიზეზის გამო.
აპის ხელმოწერა
ვინაიდან Android App Bundles არ არის APK, თქვენ არ შეგიძლიათ უბრალოდ გახსნათ AAB ფაილი და დააინსტალიროთ იგი პირდაპირ მოწყობილობაზე. როდესაც თქვენ ატვირთავთ ერთს Play Store-ში, Google იყენებს პაკეტს სხვადასხვა (ხელმოუწერელი) APK ფაილების შესაქმნელად. ეს APK უნდა იყოს ხელმოწერილი, სანამ ისინი დაინსტალირდებიან.
იმის ნაცვლად, რომ დეველოპერს მოსთხოვოს ხელი მოაწეროს და ხელახლა ატვირთოს ეს გენერირებული APK-ები, Google სანაცვლოდ თავად მართავს ხელმოწერას. Play Store ან იყენებს მის მიერ შექმნილ ახალ გასაღებს, ან სთხოვს დეველოპერს გასაღებს, რომელსაც ისინი იყენებენ ხელმოწერისთვის APK-ები. ორივე ვარიანტით, Google ამუშავებს დეველოპერის საჯარო ხელმოწერას და უზრუნველყოფს ატვირთვას გასაღები. Google იყენებს ატვირთვის გასაღებს შიდა გადამოწმებისთვის და დარწმუნდება, რომ დეველოპერის მიერ ატვირთული App Bundle (ან ზოგიერთ შემთხვევაში APK) სწორია.
თუ ატვირთვის გასაღები დაზიანებულია ან დაკარგულია, დეველოპერებს შეუძლიათ მოითხოვონ ახალი და ხელმოწერის გასაღები, რომელიც გამოიყენება აპის გასავრცელებლად, უცვლელი რჩება.
აპლიკაციის ხელმოწერას კიდევ ბევრი რამ აქვს, მაგრამ ეს არის ის, რაც ეხება ამ სტატიას. თუ გსურთ, შეგიძლიათ მეტი წაიკითხოთ App Bundles-ზე და App Signing-ზე ეს საშუალო სტატია Wojtek Kaliciński-ის მიერ.
კრიტიკა
თეორიულად და პრაქტიკაში, App Bundles საკმაოდ კარგია. ისინი ამცირებენ მონაცემთა გამოყენებას და ინსტალაციის ზომას, ეს ყველაფერი მომხმარებლისთვის არაფრის გაკეთების გარეშე. მაგრამ იმის გამო, თუ როგორ განხორციელდა ის, ზოგიერთმა დეველოპერმა და უსაფრთხოების მკვლევარმა ბოლო რამდენიმე თვის განმავლობაში გამოთქვა შეშფოთება. სანამ შევაჯამებ ამ შეშფოთებას, მინდა გამოვყო ერთი წუთი და ვთქვა, რომ ქვემოთ დაწერილი უმეტესობა პირდაპირ არის სტატიების სერიის საფუძველზე დეველოპერის მარკ მერფის მიერ CommonsWare. თქვენ აბსოლუტურად უნდა შეამოწმოთ მისი სტატიები, რადგან ისინი უფრო მეტ დეტალს და კრიტიკას გვაწვდიან დეველოპერის პერსპექტივიდან.
უსაფრთხოება
კლასიკურ განაწილების მოდელში დეველოპერი ინახავს გასაღებს, რომელსაც იყენებს APK-ზე ხელმოწერისთვის. ის არასოდეს არის გაზიარებული საზოგადოებისთვის და მასზე წვდომა მხოლოდ უფლებამოსილ ადამიანებს უნდა ჰქონდეთ. ეს უზრუნველყოფს, რომ მხოლოდ იმ ადამიანებს შეუძლიათ შექმნან მოქმედი APK.
მაგრამ თუ იყენებთ App Bundles-ს Play Store-ზე, Google არის ის, ვინც მართავს გასაღებს, რომელიც ხელს აწერს APK-ების მიღებას მომხმარებლებისთვის. The ნაგულისხმევი ქცევა Google Play-ში ატვირთული ახალი აპებისთვის 2021 წლის აგვისტოდან არის Google-ისთვის შექმნას საკუთარი სადისტრიბუციო გასაღები, რომელსაც ის დეველოპერისგან კონფიდენციალურად ინახავს.
დეველოპერები წარადგენენ ახალი აპლიკაციები Google-ს ექნება მათი პირადი გასაღების მართვა ნაგულისხმევად, თუმცა დეველოპერები აგზავნიან განახლებებს არსებული აპლიკაციები შეუძლია გააგრძელოს APK-ების გამოყენება ან მათ შეუძლიათ გადაერთონ AAB დისტრიბუციაზე Google-ისთვის ახალი გასაღების გენერირებით, რათა გამოიყენოს ახალი მომხმარებლებისთვის. არსებული აპლიკაციები არ არის საჭირო გადაერთონ APK დისტრიბუციიდან Android App Bundles-ზე, თუმცა ეს ვარიანტი მათთვის ხელმისაწვდომია, თუ მათ აირჩევენ. გარკვეული დაბრუნების შემდეგ, Google შესაძლებელს გახდის კიდეც ატვირთოთ თქვენი პირადი გასაღები Google-ისთვის, რომლითაც ხელმოწერის საშუალება ექნება, როგორც ახალი, ისე არსებული აპებისთვის. არცერთი ეს სიტუაცია არ არის იდეალური, რადგან რაც არ უნდა მოხდეს, Google-ს ექნება წვდომა თქვენს პირად გასაღებზე, თუ გსურთ გამოიყენეთ Android App Bundles (და დეველოპერებს არ აქვთ არჩევანი ამ საკითხში, სურთ თუ არა ახალი აპლიკაციის გაგზავნა აგვისტოს შემდეგ 2021!)
მიუხედავად იმისა, რომ ჩვენ დარწმუნებულები ვართ, რომ Google ძალიან სერიოზულად ეკიდება უსაფრთხოებას, დედამიწაზე არ არსებობს კომპანია, რომელიც დაცული იქნება მონაცემთა დარღვევისგან. თუ გასაღები, რომელსაც Google იყენებს თქვენი აპის გასავრცელებლად ხელმოწერისთვის, ერთ-ერთ ამ დარღვევაშია, მაშინ ნებისმიერს შეუძლია ხელი მოაწეროს თქვენი აპის ვერსიას და გამოიყურებოდეს, რომ ის თქვენ მიერაა ხელმოწერილი. და ზოგიერთი დეველოპერი და უსაფრთხოების ექსპერტი არ არის კმაყოფილი ამ შესაძლებლობით. ეს ძალიან, ძალიან მცირე შესაძლებლობაა, დიახ, მაგრამ ის ფაქტი, რომ ეს შესაძლებლობა საერთოდ აშინებს ზოგიერთს infosec საზოგადოებაში.
თუ დეველოპერები ხელს აწერენ Android APK-ებს, ნიშნავს, რომ ნებისმიერს შეუძლია დაადასტუროს APK-ები Google Play-დან, ბრმა ნდობა არ არის საჭირო. ეს არის ელეგანტური დიზაინი, რომელიც უზრუნველყოფს შემოწმებას უსაფრთხოებას. App Bundles ამას თავის თავზე აქცევს და, როგორც ჩანს, სტრუქტურირებულია გამყიდველის ჩაკეტვის ხელშეწყობისთვის. არსებობს მრავალი ალტერნატიული ტექნიკური მიდგომა, რომელიც უზრუნველყოფს მცირე ზომის APK-ებს, რომლებიც ჯერ კიდევ ხელმოწერილია დეველოპერების მიერ, მაგრამ ისინი არ ანიჭებენ უპირატესობას Play-ს. მაგალითად, ყველა APK ვარიანტი შეიძლება იყოს გენერირებული და ხელმოწერილი დეველოპერის მიერ, შემდეგ ატვირთვა ნებისმიერ აპლიკაციის მაღაზიაში.
რა თქმა უნდა, არსებობს არგუმენტები იმის შესახებ, ჯობია თუ არა პირადი გასაღებების უსაფრთხო შენახვა Google-ის ან ცალკეული დეველოპერების ხელში მიტოვება. მაგრამ ეს დეველოპერები (ალბათ) ჩვეულებრივ არ იყენებენ ცენტრალურ საცავს თავიანთი გასაღებებისთვის. დეველოპერების იძულებით გამოიყენონ Play App Signing, მავნე თავდამსხმელმა მხოლოდ ერთხელ უნდა დაარღვიოს Google-ის უსაფრთხოება ათასობით ან მილიონობით გასაღების მისაღებად.
რა ღირს, აი, რას ამბობს Google იმის შესახებ, თუ როგორ იცავს თქვენს ხელმოწერის გასაღებს მის ინფრასტრუქტურაზე:
[blockquote author="Wojtek Kaliciński, Android Developer Advocate Google-ში"]როდესაც იყენებთ Play App Signing-ს, თქვენი გასაღებები ინახება იმავე ინფრასტრუქტურაზე, რომელსაც Google იყენებს საკუთარი გასაღებების შესანახად.
გასაღების წვდომა რეგულირდება მკაცრი ACL-ებით და ყველა ოპერაციისთვის აშკარა აუდიტის ბილიკებით.
დეველოპერის გასაღებით გენერირებული და ხელმოწერილი ყველა არტეფაქტი ხელმისაწვდომია თქვენთვის Google Play Console-ში შემოწმებისთვის/დამოწმებისთვის.
გარდა ამისა, გასაღების დაკარგვის თავიდან ასაცილებლად, ჩვენ ხშირად ვაკეთებთ ჩვენი პირველადი მეხსიერების სარეზერვო ასლებს. ეს სარეზერვო ასლები მკაცრად არის დაშიფრული და ჩვენ რეგულარულად ვამოწმებთ ამ სარეზერვო ასლების აღდგენას.
თუ გსურთ გაიგოთ Google-ის ტექნიკური ინფრასტრუქტურის შესახებ, წაიკითხეთ Google Cloud Security White Papers.[/blockquote]
როგორც დიდი, ყველა ხმა, დაკარგვა და ქურდობა მაინც შესაძლებელია. და აუდიტის ბილიკები მხოლოდ ხელს უწყობს მომავალი თავდასხმების თავიდან აცილებას; მათ არ დაუბრუნდებათ გატეხილი გასაღებები.
არასანქცირებული ცვლილებების პოტენციალი
Google-ის მიერ App Bundles-ის დაყენების ერთ-ერთი დიდი პრობლემა არის აპში არაავტორიზებული ცვლილებების დამატების პოტენციალი. App Bundle-დან APK-ების ამოღების პროცესი არსებითად მოიცავს მოდიფიკაციებს, ვინაიდან Google-მა ხელით უნდა შექმნას თითოეული APK. ხოლო Google-მა დაჰპირდა, რომ ის არ შეიტანს ან შეცვლის კოდს, App Bundle პროცესის პრობლემა ის არის, რომ მას ამის უფლება აქვს.
აქ მოცემულია რამდენიმე მაგალითი იმისა, რისი უფლება აქვს Google-ის პოზიციაზე მყოფ კომპანიას:
თქვით, რომ არსებობს უსაფრთხო შეტყობინებების აპი, რომელსაც ხალხი იყენებს კომუნიკაციისთვის მთავრობის მეთვალყურეობის რისკის გარეშე. ეს შეიძლება იყოს წარმოუდგენლად სასარგებლო ინსტრუმენტი იმ ადამიანებისთვის, რომლებიც აპროტესტებენ ავტორიტარულ მთავრობას, ან თუნდაც მათთვის, ვისაც უბრალოდ სურს შეინარჩუნოს კონფიდენციალურობა. ამ მთავრობას, რომელსაც სურს დაინახოს, რას ამბობენ აპლიკაციის მომხმარებლები, შეუძლია აიძულოს Google-მა დაამატოს სათვალთვალო უკანა კარი აპის კოდში.
ეს მაგალითი ცოტა უფრო უწყინარია, მაგრამ ის ასევე ეხება ზოგიერთ ადამიანს. თქვით, რომ არის აპლიკაცია, რომელიც იღებს მილიონობით ჩამოტვირთვას დღეში, მაგრამ მასში არ არის რეკლამა ან ანალიტიკა. ეს არის უზარმაზარი მონაცემთა წყარო, რომელსაც არ აქვს ამ მონაცემებზე წვდომის საშუალება. Google, როგორც სარეკლამო კომპანია, შეიძლება მოისურვოს ამ მონაცემებზე წვდომა.
აპების განაწილების კლასიკურ APK მოდელში Google-ს არ შეუძლია აპების შეცვლა ხელმოწერის შეცვლის გარეშე. თუ Google ცვლის ხელმოწერას, განსაკუთრებით პოპულარულ აპზე, ხალხი შეამჩნევს, რადგან განახლება არ დაინსტალირდება. მაგრამ App Bundles-ით და App Signing-ით Google-ს შეეძლო ჩუმად შეეტანა საკუთარი კოდი აპებში მათ გავრცელებამდე. ხელმოწერა არ შეიცვლება, რადგან Google-ს ექნება ხელმოწერის გასაღები.
გასაგები რომ იყოს, ეს მაგალითები წარმოუდგენლად ნაკლებად სავარაუდოა. Google მიდრეკილია უბრალოდ მთლიანად გამოდით პრობლემური ბაზრებიდან, ვიდრე ადაპტირება. მაგრამ მიუხედავად იმისა, რომ ეს ნაკლებად სავარაუდოა, მაინც შესაძლებელია. მხოლოდ იმიტომ, რომ კომპანია გვპირდება, რომ რაღაც არ მოხდება, ეს არ იძლევა ამის გარანტიას.
კოდის გამჭვირვალობა
Google-მა, გაიგო ეს შეშფოთება, ამ კვირაში შემოიტანა ახალი ფუნქცია ე.წ კოდების გამჭვირვალობა აპლიკაციების პაკეტებისთვის. კოდის გამჭვირვალობა დეველოპერს საშუალებას აძლევს შექმნას მეორე ხელმოწერა, რომელიც აპთან ერთად მიეწოდება მომხმარებლებს. ეს დამატებითი ხელმოწერა უნდა შეიქმნას ცალკეული პირადი გასაღებიდან, რომელზეც მხოლოდ დეველოპერს აქვს წვდომა. თუმცა, ამ მეთოდს აქვს გარკვეული შეზღუდვები.
კოდის გამჭვირვალობა მოიცავს მხოლოდ კოდს. ეს შეიძლება აშკარად ჩანდეს სახელიდან გამომდინარე, მაგრამ ის ასევე ნიშნავს, რომ ის არ აძლევს მომხმარებლებს უფლებას გადაამოწმონ რესურსები, მანიფესტი ან რაიმე სხვა, რომელიც არ არის DEX ფაილი ან მშობლიური ბიბლიოთეკა. მიუხედავად იმისა, რომ არაკოდური ფაილების მავნე მოდიფიკაციები ჩვეულებრივ გაცილებით ნაკლებ გავლენას ახდენს, ის მაინც რჩება აპის უსაფრთხოებაში.
კოდის გამჭვირვალობის კიდევ ერთი პრობლემა არის ის, რომ არ არის თანდაყოლილი გადამოწმება. Ერთისთვის, ეს არჩევითი ფუნქციაა, ასე რომ, დეველოპერებმა უნდა დაიმახსოვრონ, რომ შეიტანონ ის ყოველი ახალი APK, რომელიც ატვირთავენ. ამ დროისთვის, ეს უნდა გაკეთდეს ბრძანების ხაზიდან და ვერსიით bundletool
რომელიც არ მოყვება Android Studio-ს. მაშინაც კი, როდესაც დეველოპერი მას მოიცავს, Android-ს არ აქვს ჩაშენებული რაიმე სახის დადასტურება, რათა შეამოწმოს, რომ კოდის გამჭვირვალობის მანიფესტი ემთხვევა აპის კოდს.
საბოლოო მომხმარებლის გადასაწყვეტია, თავად შეამოწმოს მანიფესტი საჯარო გასაღების შედარებით, რომელსაც დეველოპერს შეუძლია უზრუნველყოს, ან APK-ის გაგზავნით დეველოპერს დასადასტურებლად.
მიუხედავად იმისა, რომ კოდების გამჭვირვალობა იძლევა იმის დადასტურებას, რომ აპში კოდი არ არის შეცვლილი, ის არ შეიცავს რაიმე სახის დადასტურებას აპის სხვა ნაწილებისთვის. ასევე არ არის თანდაყოლილი ნდობა ამ პროცესში. თქვენ შეიძლება ამტკიცებდეთ, რომ თუ არ ენდობით Google-ს, თქვენ ალბათ ასრულებთ დამოუკიდებლად გადამოწმების ამოცანას, მაგრამ რატომ უნდა მოგიწიოთ?
არის სხვა პრობლემები კოდის გამჭვირვალობის ფუნქციასთან დაკავშირებით, როგორიცაა აღნიშნა მარკ მერფის მიერ CommonsWare. მე გირჩევთ წაიკითხოთ მისი სტატია მახასიათებლის უფრო სიღრმისეული ანალიზისთვის.
დეველოპერის მოხერხებულობა და არჩევანი
მესამე (და ბოლო ამ სტატიისთვის) მიზეზი, რის გამოც ზოგიერთი დეველოპერი აწუხებს App Bundles-ს, არის შემცირებული მოხერხებულობა და არჩევანი.
თუ დეველოპერი ქმნის ახალ აპს Play Store-ზე მას შემდეგ, რაც Google დაიწყებს App Bundles-ის მოთხოვნას და ისინი აირჩევენ ნაგულისხმევი ვარიანტია Google-ისთვის ხელმოწერის გასაღების მართვის უფლება, მათ არასოდეს ექნებათ წვდომა ამ ხელმოწერაზე გასაღები. თუ იმავე დეველოპერს სურს ამ აპლიკაციის გავრცელება სხვა აპების მაღაზიაში, მათ მოუწევთ გამოიყენონ საკუთარი გასაღები, რომელიც არ ემთხვევა Google-ს.
ეს ნიშნავს, რომ მომხმარებლებს მოუწევთ ან დააინსტალირონ და განაახლონ Google Play-დან ან მესამე მხარის წყაროებიდან. თუ მათ სურთ შეცვალონ წყარო, უნდა წაშალონ აპი, პოტენციურად დაკარგონ მონაცემები და ხელახლა დააინსტალირონ. APK აგრეგატორებს მოსწონთ APKMirror შემდეგ ასევე მოუწევს გაუმკლავდეს რამდენიმე ოფიციალურ ხელმოწერას იმავე აპისთვის. (ტექნიკურად, მათ უკვე უწევთ ამის გაკეთება, რადგან App Signing გაძლევთ საშუალებას შექმნათ ახალი, უფრო უსაფრთხო გასაღები ახალი მომხმარებლებისთვის, მაგრამ ეს მათთვის და სხვა საიტებისთვის უარესი იქნება, როცა ყველა აქვს გაკეთება.)
Google-ის პასუხი ამ საკითხზე არის App Bundle Explorer-ის ან Artifact Explorer-ის გამოყენება Play Console-ში, რათა ჩამოტვირთოს მიღებული APK-ები ატვირთული ნაკრებიდან. Code Transparency-ის მსგავსად, ეს არ არის სრული გამოსავალი. Play Console-დან ჩამოტვირთული APK-ები გაიყოფა მოწყობილობის სხვადასხვა პროფილებზე. მიუხედავად იმისა, რომ Play Console მხარს უჭერს მრავალი APK-ის ატვირთვას ერთი აპის ერთი ვერსიისთვის, ბევრი სხვა სადისტრიბუციო არხი ამას არ აკეთებს.
ამრიგად, App Bundles-ის გამოყენების ბევრი უპირატესობა ქრება, როდესაც დეველოპერები მართავენ მრავალ მაღაზიას, რაც ართულებს განაწილებას. ახალი ამბებით რომ Windows 11 არის Android აპლიკაციის მხარდაჭერის მოპოვება Amazon Appstore-ის წყალობით, ზოგიერთს მიაჩნია, რომ App Bundles-ის მოთხოვნა დეველოპერებს ამაზონზე გავრცელების სტიმულირებას მოახდენს. რა თქმა უნდა, Google-ის მთავარი საზრუნავი არის საკუთარი აპლიკაციების მაღაზია, მაგრამ ეს არის ზუსტად ის ისინი კონკურენტებთან ერთად ცხელ წყალში ჩასვეს მიჰყავს მათ, რათა მცირე, შემრიგებლური ცვლილებები თუ როგორ მუშაობს მესამე მხარის აპლიკაციების მაღაზიები Android-ზე.
რამდენიმე მაღაზიასთან დაკავშირებული რამდენიმე საკითხია აპების ურთიერთდაკავშირება და სწრაფი ხანძრის ტესტირება.
დავიწყოთ აპების ურთიერთდაკავშირებით. ოდესმე ჩამოტვირთეთ აპლიკაცია, რომელიც ბლოკავს ფუნქციებს paywall-ის უკან? თითქმის აუცილებლად. ზოგიერთი დეველოპერი ათავსებს ფუნქციებს აპს-შიდა შესყიდვის უკან, მაგრამ სხვებმა შეიძლება აირჩიონ ცალკე, ფასიანი აპლიკაციის შექმნა. როდესაც ეს დამატებითი აპი დაინსტალირდება, ძირითადი აპის ფუნქციები განბლოკილია.
მაგრამ რა უშლის ვინმეს, უბრალოდ დააინსტალიროს დანამატი მეკობრული წყაროდან? დეველოპერებისთვის უამრავი ვარიანტია, მაგრამ ერთი მაინც გულისხმობს ხელმოწერით დაცული ნებართვების გამოყენებას. თქვით, რომ მთავარი აპლიკაცია აცხადებს ხელმოწერით დაცულ ნებართვას. ამის შემდეგ, დამატებითი აპლიკაცია აცხადებს, რომ მას სურს გამოიყენოს ეს ნებართვა. იდეალურ შემთხვევაში, დამატებით აპს ასევე ექნება მასში ლიცენზიის დადასტურების გარკვეული ფუნქციონირება, რომელიც უკავშირდება ინტერნეტს, რათა დარწმუნდეს, რომ მომხმარებელი ლეგიტიმურია.
თუ ორივე აპს აქვს ერთი და იგივე ხელმოწერა, Android მისცემს დამატებით აპს ნებართვას და მეკობრეობის დაცვის შემოწმება გაივლის. თუ დამატებით აპს არ აქვს სწორი ხელმოწერა, ნებართვა არ გაიცემა და დადასტურება ვერ მოხერხდება.
კლასიკური APK განაწილების მოდელით, მომხმარებელს შეუძლია მიიღოს ნებისმიერი აპი ნებისმიერი ლეგიტიმური წყაროდან და დაასრულოს იგი. მიმდინარე ნაგულისხმევი App Bundle მოდელით, ხელმოწერები მთავარ და დამატებით აპებზე არ ემთხვევა. Google აპირებს შექმნას უნიკალური გასაღები თითოეული აპისთვის. დეველოპერს ყოველთვის შეეძლო ხელმოწერით დაცული ნებართვის გაუქმება და ხელმოწერის პირდაპირი ჰეშის დადასტურება, მაგრამ ეს ბევრად ნაკლებად უსაფრთხოა.
და შემდეგ არის სწრაფი ცეცხლის ტესტირება. მომხმარებლები მუდმივად ელფოსტით აგზავნიან დეველოპერებს მათ აპებში არსებული პრობლემების შესახებ. ზოგჯერ ეს პრობლემები არის მარტივი გამოსწორება: გაამრავლეთ პრობლემა, იპოვნეთ პრობლემა, გაასწორეთ და ატვირთეთ ახალი ვერსია. მაგრამ ზოგჯერ ისინი არ არიან. ზოგჯერ დეველოპერებს არ შეუძლიათ პრობლემის რეპროდუცირება. მათ შეუძლიათ გამოასწორონ ის, რასაც ფიქრობენ, რომ პრობლემაა, მაგრამ შემდეგ მომხმარებელმა უნდა შეამოწმოს იგი. ახლა დავუშვათ, რომ მომხმარებელმა დააინსტალირა აპლიკაცია Google Play-ს მეშვეობით.
APK მოდელით, დეველოპერს შეუძლია შეცვალოს გარკვეული კოდი, შექმნას და მოაწეროს ხელი ახალ APK-ს და გაუგზავნოს მომხმარებელს ტესტირებისთვის. იმის გამო, რომ სატესტო APK-ის ხელმოწერა ემთხვევა მომხმარებლის მიერ დაინსტალირებულ ხელმოწერას, ეს მარტივი პროცესია განახლების, ტესტირებისა და მოხსენების შესახებ. App Bundles-ით ეს იშლება. ვინაიდან Google ხელს აწერს მომხმარებლის მიერ თავდაპირველად დაინსტალირებულ APK-ს, ის არ ემთხვევა დეველოპერის მიერ გაგზავნილ APK-ის ხელმოწერას. თუ ეს აპი გამოქვეყნდება App Bundles-ის ვადის გასვლის შემდეგ, დეველოპერს არ ექნება წვდომა Google-ის საკვანძო საშუალებებზე. ტესტირების მიზნით, მომხმარებელმა უნდა წაშალოს მიმდინარე აპი სატესტო ვერსიის დაყენებამდე.
აქ არის მთელი რიგი პრობლემები. პირველი, არის უხერხულობა, როგორც დეველოპერის, ასევე მომხმარებლის მხრიდან. აპის დეინსტალაცია მხოლოდ გამოსწორების შესამოწმებლად არ არის სახალისო. და რა მოხდება, თუ პრობლემა გაქრება? ეს იყო დეველოპერის მიერ განხორციელებული ცვლილებები, თუ იმიტომ, რომ მომხმარებელმა ეფექტურად გაასუფთავა აპის მონაცემები? Play Store-ს აქვს შიდა ტესტირება, რომელიც, სავარაუდოდ, დეველოპერებს საშუალებას აძლევს გააკეთონ სწრაფი სროლა და განაწილება, მაგრამ ის მოითხოვს, რომ მომხმარებელს ჯერ გამოუშვას ვერსია. ეს ნამდვილად არაფერს ასწორებს.
იმ შემთხვევაში, თუ ეს ყველაფერი ჰიპოთეტურ სისულელეებად ჟღერს, აქ არის დეველოპერის ძალიან რეალური მაგალითი, რომელსაც ექნება ეს პრობლემები, თუ Google-ს მისცემენ უფლებას შექმნას მათთვის პირადი გასაღები: ჟოაო დიასი. ის არის Tasker-ის დეველოპერი, მოდული აპლიკაციების მთელ ჯგუფთან ერთად, მათ შორის AutoApps კომპლექტს. ახალი App Bundles-ის მოთხოვნით, João-ს განვითარების ციკლი შეიძლება ბევრად უფრო რთული გახდეს, ყოველ შემთხვევაში, ახალი აპებისთვის. სატესტო ვერსიების პირდაპირ გაგზავნა ნაკლებად მოსახერხებელი იქნება. ლიცენზიების გადამოწმება ნაკლებად ეფექტური იქნება.
ეს შეიძლება ჟღერდეს ცოტათი, მაგრამ არა ისე, რომ João არის პატარა დეველოპერი და, სავარაუდოდ, ის მარტო არ არის. Play Store-ზე ბევრი აპია, რომლებიც ეყრდნობა ხელმოწერის გადამოწმებას არალეგიტიმური მომხმარებლების გამოსავლენად.
რა თქმა უნდა, დეველოპერებისთვის Google-ში საკუთარი ხელმოწერის გასაღებების ატვირთვის ახალი ვარიანტით, ეს საკითხები გარკვეულწილად მაინც შემსუბუქებულია. მაგრამ დეველოპერებმა უნდა მიიღონ მონაწილეობა, რათა ჩართონ ვარიანტი თითოეული აპისთვის. თუ ეს ასე არ მოხდა, ურთიერთდაკავშირება ვერ მოხერხდება და სწრაფი სროლის მხარდაჭერა მოითხოვს Google-ში Bundle-ის ატვირთვას და APK-ების გენერირების მოლოდინს, სანამ მომხმარებელს გაუგზავნის სწორს. გარდა ამისა, ეს მაინც ნიშნავს, რომ მათ უნდა გაუზიარონ თავიანთი პირადი გასაღები, რაც გვაბრუნებს იმ პრობლემებზე, რომლებიც ადრე განვიხილეთ.
გადაწყვეტილებები
ეს ძველი საკითხია იმის გათვალისწინებით, რომ App Bundle-ის მოთხოვნები გამოქვეყნდა თვეების წინ, ამიტომ შუალედში საკმაოდ ბევრი გადაწყვეტა იყო შემოთავაზებული.
ერთი გამოსავალი არის Play App Signing-ის საჭიროების თავიდან აცილება. იმის ნაცვლად, რომ შექმნას App Bundle, რომელსაც Google ამუშავებს APK-ებად და ხელმოწერებად, ეს დამუშავება შეიძლება განხორციელდეს Android Studio-ს მიერ. შემდეგ, დეველოპერებს შეუძლიათ უბრალოდ ატვირთონ ZIP ლოკალურად ხელმოწერილი APK-ებით სავსე თითოეული კონფიგურაციისთვის, რომელსაც Google გამოიმუშავებდა.
ამ გადაწყვეტით, Google-ს საერთოდ არ დასჭირდება წვდომა დეველოპერების გასაღებებზე. პროცესი ძალიან წააგავს კლასიკურ APK განაწილების მოდელს, მაგრამ მოიცავს მრავალ, უფრო პატარა, APK-ს ერთის ნაცვლად.
კიდევ ერთი გამოსავალია უბრალოდ არ მოითხოვოთ App Bundles-ის გამოყენება და განაგრძოთ დეველოპერებს საშუალება ატვირთონ ადგილობრივად ხელმოწერილი APK-ები. მიუხედავად იმისა, რომ App Bundles შეიძლება იყოს მომხმარებლისთვის უკეთესი გამოცდილება ხშირ შემთხვევაში, ზოგიერთი აპი რეალურად არ სარგებლობს კონფიგურაციის დაყოფით, მინიმალური ზომით შემცირება.
თუ Google-მა დანერგა ორივე გადაწყვეტა, მაშინ დეველოპერს, რომელსაც სურს გამოიყენოს App Bundles, არ მოუწევს Google-ში დარეგისტრირებისას და დეველოპერს, რომლის აპი დიდ სარგებელს არ მიიღებს ამ ფორმატით, არ მოუწევს მისი გამოყენება ყველა.
Google-ის პასუხები
თვითმმართველობის ხელმოწერა
როდესაც მათ პირველად ჰკითხეს დეველოპერებისთვის App Bundles-ზე ხელმოწერის დაშვების თაობაზე, Google-ის პასუხი იყო ძალიან არასასურველი:
[blockquote author=""] ასე რომ, მე მოკლედ ვისაუბრე მომავალ წელს ახალი აპებისთვის აპლიკაციების პაკეტების გამოყენების მოთხოვნაზე და ერთი რამ, რაც ამას თან ახლავს არის ის, რომ გაფართოებით ჩვენ დაგჭირდებათ Play App Signing. ასე რომ, დეველოპერებს დასჭირდებათ Play-ზე App Signing გასაღების გენერირება, ან Play-ზე საკუთარი გასაღების ატვირთვა... რადგან ეს არის აპლიკაციების ნაკრების წინაპირობა. ჩვენ მოვისმინეთ დეველოპერებისგან, რომ ზოგიერთ მათგანს უბრალოდ არ სურს ამის გაკეთება. მათ არ სურთ Play-ს მიერ მართული გასაღებები. და ამჟამად ეს შეუძლებელია, თუ გსურთ გამოიყენოთ აპლიკაციების ნაკრები.
მაგრამ, ჩვენ მოვისმინეთ ეს გამოხმაურება და… მე ახლა ვერაფერზე ვისაუბრებ, არაფერი გვაქვს გასაცხადები, მაგრამ ვეძებთ, როგორ შევამსუბუქოთ ზოგიერთი შეშფოთება. ეს სულაც არ უნდა მოგცეთ საშუალება, რომ შეინახოთ საკუთარი გასაღები პაკეტების ატვირთვისას. ჩვენ განვიხილავთ სხვადასხვა ვარიანტებს. ჩვენ უბრალოდ არ გვაქვს გამოსავალი ახლავე გამოვაცხადოთ. მაგრამ, მოთხოვნამდე ჯერ კიდევ გვაქვს დაახლოებით ერთი წელი, ასე რომ, მე ნამდვილად იმედი მაქვს, რომ ამაზე პასუხი დეველოპერებს გვექნება.[/blockquote]
ეს იყო გასული წლის ნოემბრის ბოლოს და, როგორც ჩანს, არაფერი მომხდარა. სულ რამდენიმე თვე დარჩა მანამდე App Bundles-ის მოთხოვნა ძალაში შედის, ჯერ კიდევ არ არის დეველოპერებისთვის საკუთარი აპების ხელმოწერის საშუალება. მიუხედავად იმისა, რომ Google-მა ახლა შესაძლებელი გახადა ატვირთვა თქვენი საკუთარი გასაღები როგორც ახალი, ისე არსებული აპებისთვის, ეს მაინც აშორებს ხელმოწერის ნაწილს დეველოპერის ხელიდან.
კოდის ცვლილებები
მიუხედავად იმისა, რომ Google კონკრეტულად დაჰპირდა, რომ Play Store არ აპირებს აპის კოდის შეცვლას, დაპირება არ არის გარანტია. App Bundles-ით და App Signing-ით, ჩვენ ვიცით, რომ არ არსებობს ტექნიკური შეზღუდვა, რომელიც ხელს უშლის Google-ს ატვირთული აპების შეცვლამდე გავრცელებამდე.
Google-მა გააცნო კოდის გამჭვირვალობა როგორც არასავალდებულო ფუნქცია, და მიუხედავად იმისა, რომ ეს გარკვეულწილად ეხმარება, მას აქვს პრობლემების საკმაოდ დიდი წილი, როგორც ადრე განვიხილეთ.
თვითნაკეთი ჩალიჩები
როდესაც Google-ს ჰკითხეს, რომ დეველოპერებს ნება დართონ შექმნან საკუთარი აპლიკაციების "პაკეტები" (ZIP-ები, რომლებიც შეიცავს გაყოფილი APK-ებს), პასუხი ძირითადად იყო "ჩვენ ამას არ ვაპირებთ":
ალბათ არა ისე, როგორც ეს კითხვაშია აღწერილი, რადგან ეს კიდევ უფრო გაართულებს გამოქვეყნების პროცესს დეველოპერებისთვის და ჩვენ რეალურად გვინდა გავხადოთ ის უფრო მარტივი და უსაფრთხო. თუმცა, კიდევ ერთხელ, ჩვენ მოვისმინეთ ეს გამოხმაურება და განვიხილავთ ვარიანტებს, თუ როგორ გავხადოთ ეს შესაძლებელი, თუმცა ალბათ არა ისე, როგორც აქ იყო აღწერილი.
საინტერესოა, რომ Google-ის დასაბუთება, როგორც ჩანს, არის ის, რომ ეს ართულებს გამოქვეყნებას. თუმცა, Google-ს მაინც შეუძლია პროცესის ავტომატიზირება, როგორც APK თაობის დიალოგის ნაწილი Android Studio-ში. გარდა ამისა, თუ მოცემული აპლიკაცია ნაწილდება მრავალ მაღაზიაში, ის რეალურად გახდის გამოქვეყნების პროცესი უფრო მარტივია, რადგან დეველოპერებს არ მოუწევთ ხელმოწერის მრავალი გასაღების და საჩივრების მართვა მომხმარებლები.
და კოდების გამჭვირვალობის შემოღებით, როგორც ჩანს, გართულება არ არის პრობლემა. კოდების გამჭვირვალობა, სულ მცირე, ამ დროისთვის მოითხოვს დეველოპერს გამოიყენოს ბრძანების ხაზის ინსტრუმენტი და მომხმარებლებმა ცალსახად დაადასტურონ იმ აპლიკაციის ვალიდობა, რომელსაც ემსახურებიან. ეს უფრო რთულია, ვიდრე პაკეტების თვითდამზადების პროცესი და გაუგებარია, რატომ არის ეს გამოსავალი Google-ს ურჩევნია.
წინსვლა
App Bundles იქნება Google Play-ში გაგზავნილი ახალი აპების განაწილების საჭირო ფორმატი 1 აგვისტოდან. მიუხედავად იმისა, რომ Google-მა გარკვეულწილად განიხილა დეველოპერებისა და უსაფრთხოების ექსპერტების მიერ წამოჭრილი საკითხების უმეტესობა, პასუხები სასურველს ბევრს ტოვებს. ბევრი აშკარა სარგებელი აქვს App Bundles-ს, როგორც შემდეგი თაობის განაწილების ფორმატს, მაგრამ ყოველთვის იქნება შეშფოთება Google-ისთვის აპის ხელმოწერის ნაწილობრივი ან სრული კონტროლის მინიჭების შესახებ.
Google-ის პასუხები და ძალისხმევა ნამდვილად დასაფასებელია, მაგრამ ზოგიერთი, როგორიცაა მარკ მერფი, ფიქრობს, რომ საკმარისად შორს არ წასულა. გადაწყვეტილებები, როგორიცაა თვითნაკეთი პაკეტები, არ არის დანერგილი და Android App Bundles-ის ბოლო ვადა სწრაფია საჭირო ახლოვდება, როგორც ჩანს, დეველოპერები Google Play-ზე შეძლებენ შეინარჩუნონ სრული კონტროლი თავიანთ აპებზე დიდი ხნის განმავლობაში უფრო გრძელი.
ჩვენ ვისაუბრებთ Android App Bundle-ის მოთხოვნის შედეგებზე Twitter-ის სივრცეში ამ დღის მეორე ნახევარში, ასე რომ შემოგვიერთდით!