აი, რატომ არ შეგიძლიათ Google კამერისა და ჩამწერის განახლებების გვერდითი ჩატვირთვა

თუ Google კამერის ან ჩამწერის აპების განახლების გვერდითი ჩატვირთვისას გინახავთ შეცდომა „ვერიფიკაციის წარუმატებელი“ შესახებ, წაიკითხეთ ეს იმის გასარკვევად, თუ რატომ.

როდესაც Google-მა გამოუშვა Pixel 5 ოქტომბერში, ჩვენ აღფრთოვანებული ვიყავით მისი ახალი აპების ხელში ჩაგდებით. (თავად ტელეფონი საკმაოდ მაგარიაასევე.) Pixel 5-ის გამოშვებასთან ერთად გამოჩნდა ახალი ვერსიები Google კამერა და Google Recorder აპები, რომლებიც ჩვენ გავუზიარეთ საზოგადოებას. თუმცა, როდესაც ძველი Pixel მოწყობილობების ბევრი მომხმარებელი ცდილობდა განახლებების გვერდით ჩატვირთვას, მათ შეხვდნენ შეცდომას (ზემოთ ნაჩვენები). უცნაურად, ყველას არ ჰქონდა პრობლემები განახლებების დაყენებასთან დაკავშირებით. ზოგიერთმა შეძლო მათი დაინსტალირება მშვენივრად, ზოგს კი მოუწია ქარხნული პარამეტრების გადატვირთვა მხოლოდ ახალი ვერსიების დაყენების მიზნით. ამ საკითხის ერთი შეხედვით შემთხვევითი ბუნების გამო, ბევრმა ცარცით მიიჩნია ეს შეცდომა. ახლა ჩვენ საკმაოდ დარწმუნებულები ვართ, რომ ეს პრობლემა არ არის გამოწვეული შეცდომისგან, არამედ Google-ის მიერ Android 11-ში ახალი API-ის გამოყენებით, რათა დაბლოკოს გვერდითი დატვირთვის განახლებები.

თუ ცდილობთ Google Camera 8.0 ან უფრო ახალი ვერსიის ან Google Recorder 2.0 ან უფრო ახალი ვერსიის გვერდით ჩატვირთვას Pixel მოწყობილობაზე, რომელიც მუშაობს Android 11, დაინახავთ შეცდომის შეტყობინებას, რომელიც ამბობს, რომ დადასტურება ვერ მოხერხდა. მაშინაც კი, თუ თქვენ ცდილობთ APK-ის გვერდით ჩატვირთვას shell ბრძანების გამოყენებით, თქვენ ვერ მიიღებთ ინსტალაციის წარუმატებლობის უფრო კონკრეტულ მიზეზს. ინსტალაციის დაბრუნების კოდი, რომელიც მოგეცემათ არის "INSTALL_FAILED_VERIFICATION_FAILURE“, რომელიც, სამწუხაროდ, არ გეტყვით, თუ რატომ ვერ მოხერხდა გადამოწმება. logcat-ის შემოწმებით, ჩვენ შეგვიძლია ზუსტად გავიგოთ, თუ რატომ ვერ ხერხდება გადამოწმება:

AppIntegrityManagerServiceImpl: Integritycheckofcom.google.android.GoogleCameraresult: DENYdueto[Rule: (PACKAGE_NAME EQ com.google.android.GoogleCamera) AND (VERSION_CODE GTE 32045130) AND (APP_CERTIFICATE EQ F0FD6C5B410F25CB25C3B53346C8972FAE30F8EE7411DF910480AD6B2D60DB83) AND NOT (INSTALLER_NAME EQ com.android.vending), DENY]

ამ შეტყობინების მიხედვით, Google კამერის ინსტალაციის მთლიანობის შემოწმება ვერ მოხერხდა, რადგან „INSTALLER_NAME“ არ ემთხვეოდა „com.android.vending“, პაკეტის სახელს Google Play Store-ისთვის. (მე ვცდილობდი დამეყენებინა Google Camera 8.0 APKMirror Installer აპის გამოყენებით, რა ღირს.) ეს შეტყობინება დაემატა სისტემის ჟურნალს:AppIntegrityManagerServiceImpl", რომელიც Android-ის ახალი "App Integrity" ფუნქციის ნაწილია. AOSP-ის კოდის მიხედვით, App Integrity შექმნილია იმისათვის, რომ უზრუნველყოს შემოწმების დამატებითი ფენა პაკეტის მენეჯერის არსებული APK ხელმოწერის დადასტურების თავზე. App Integrity API, როგორც ჩანს, იყენებს კომპლექტს წესები გადაწყვიტოს დაუშვას თუ არა ინსტალაცია. წესები მოწოდებულია სისტემური აპლიკაციის მიერ - რომელიც, ჩვენი აზრით, არის Google Play სერვისები - და არის ინახება ფაილში.

გარდა ამისა, აპლიკაციის მთლიანობა ასევე რეკავს სხვა კლასმა დარეკა SourceStampVerifier თუ "წყაროს ბეჭედი" ჩართულია მანიფესტის მეტამონაცემებში. მაგალითად, ჩვენ გვჯერა, რომ არის „წყაროს ბეჭედი“ Google Camera აპის Manifest-იდან:

<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>

რაც შეგვიძლია ვთქვათ, წყაროს ბეჭედი გამოიყენება პაკეტის ინსტალერის ხელმოწერის შესამოწმებლად. ასე რომ, მაგალითად, თქვენ არ შეგიძლიათ მოატყუოთ AppIntegrity და დაუშვათ ინსტალაცია მაშინაც კი, თუ თქვენ გააყალბა Play Store როგორც ინსტალერი.

გარდა ამისა, ჩვენ ვერ გავარკვიეთ, თუ როგორ იყენებს Google AppIntegrity-ს და მასთან დაკავშირებულ API-ებს Google Camera-სა და Google Recorder-ის აპების გვერდითი დატვირთვის განახლებების დასაბლოკად. Google Play Services APK-ის სწრაფი გამოკვლევა ცხადყოფს, რომ ის იყენებს ამ API-ებს, მაგრამ კოდი ზედმეტად ბუნდოვანია იმისთვის, რომ რეალურად გაიგოს ყველაფერი. ჩვენ კი ვიპოვეთ დირექტორია, სადაც მთლიანობის წესები ინახება - /data/system/integrity_rules - მაგრამ ის ნაკლებად გამოსაყენებელი იყო, რადგან შეიცავს მხოლოდ სერიულ მონაცემებს. ჩვენ ასევე ვერ ვიპოვნეთ მთლიანობის გადამოწმების გამორთვის გზა (როგორც ჩანს, ეს არ არის ისეთი მარტივი, როგორც უბრალოდ პარამეტრის შეცვლა), თუმცა ჩვენ გვჯერა, რომ ზოგიერთისთვის ქარხნული პარამეტრების გადატვირთვა მუშაობს, არის ის, რომ Google Play Services-ს არ აქვს შანსი, მოახდინოს წესების ინიციალიზაცია ინსტალაციის დაბლოკვის მიზნით. logcat შეტყობინება და ამ ახალი API-ების დანერგვა Android 11-ში მტკიცედ გვთავაზობს, რომ ეს ყველაფერი დიზაინით არის და არა ხარვეზი, თუმცა.

Google-ს საჯაროდ არ გაუკეთებია კომენტარი ამ API-ების გამოყენებაზე (არც ჩვენ მათგან ველით ამას) და მათ არ უპასუხეს, როდესაც კომენტარისთვის მიაღწიეს. თუმცა, ჩვენ გვაქვს რამდენიმე თეორია, თუ რატომ ბლოკავენ გვერდითი განახლებებს. პირველ რიგში, ისინი შეიძლება იცავდნენ ხალხს მათი მოწყობილობისთვის აპლიკაციის არასწორი ვერსიის დაყენებისგან. Google აწვდის თავისი აპების კონკრეტულ ვერსიებს კონკრეტულ Pixel მოწყობილობებზე. მაგალითად, Device Personalization Services აპის რამდენიმე ვერსია შეგიძლიათ იხილოთ ონლაინ. მიუხედავად იმისა, რომ ისინი ყველა დაინსტალირებულია Pixel მოწყობილობებზე, ეს შესაძლებელი იყო ერთ მომენტში დაკარგეთ ცოცხალი სუბტიტრების ფუნქცია Pixel 4-ზე ძველი Pixel მოწყობილობისთვის შექმნილი ვერსიის ჩამოტვირთვით. კიდევ ერთი მიზეზი შეიძლება იყოს „აპლიკაციების მიკვლევადობის გაუმჯობესება არაავტორიზებული გავრცელების მიმართ“, როგორც ეს Google-მა განმარტა SourceStampVerifier კლასში.

ჯერჯერობით Google-ის მხოლოდ რამდენიმე აპი იყენებს აპების ნაკრების ფორმატს (როგორიცაა Google Camera და Google Recorder) ბლოკავს არა-Play Store-ის ინსტალაციას, მაგრამ ჩვენ არ ვიცით, გაავრცელებს თუ არა კომპანია ამ ქცევას თავის სხვა აპებზე როგორც კი ისინი ყველა AAB ფორმატზე გადადიან. ჩვენ ასევე განვიხილეთ, თუ აპების პაკეტებზე გადართვა საჭიროებდა აპის მთლიანობის განხორციელებას, მაგრამ აღმოვაჩინეთ, რომ Google უკვე აქვს გამოსავალი გაუმკლავდეს, როდესაც მომხმარებლები ცდილობენ დააინსტალირონ აპი, რომელსაც არ აქვს ყველა საჭირო გაყოფა. როგორიც არ უნდა იყოს საქმე, ჩვენ არ ვფიქრობთ, რომ Google აპირებს დაბლოკოს თავისი აპლიკაციების ყველა გვერდითი დატვირთვა, თუმცა ეს ხელსაწყოები, რა თქმა უნდა, მათ ამის საშუალებას აძლევს.

მადლობა დეველოპერებს vvb2060, aviraxp და Quinny899 ამ სტატიაში გაწეული დახმარებისთვის დამადლობა PNF Software-ს, რომ მოგვაწოდა გამოყენების ლიცენზია JEB დეკომპილერი, პროფესიული დონის საპირისპირო ინჟინერიის ინსტრუმენტი Android აპლიკაციებისთვის.