นี่คือสาเหตุที่คุณไม่สามารถไซด์โหลดการอัปเดตของ Google Camera and Recorder ได้

หากคุณเห็นข้อผิดพลาด "การยืนยันล้มเหลว" เมื่อไซด์โหลดการอัปเดตแอป Google Camera หรือ Recorder โปรดอ่านข้อความนี้เพื่อดูว่าสาเหตุคืออะไร

เมื่อ Google เปิดตัว Pixel 5 ในเดือนตุลาคม เรารู้สึกตื่นเต้นที่ได้ลองใช้แอปใหม่ (โทรศัพท์นั่นเอง ค่อนข้างเจ๋งอีกด้วย) ด้วยการเปิดตัว Pixel 5 ก็มีเวอร์ชั่นใหม่ๆ Google กล้องถ่ายรูป และ Google เครื่องบันทึก แอพที่เราแชร์กับชุมชน อย่างไรก็ตาม เมื่อผู้ใช้อุปกรณ์ Pixel รุ่นเก่าจำนวนมากพยายามไซด์โหลดการอัปเดต พวกเขาพบข้อผิดพลาด (ดังที่แสดงด้านบน) น่าแปลกที่ไม่ใช่ทุกคนที่มีปัญหาในการติดตั้งการอัปเดต บางตัวสามารถติดตั้งได้ดี ในขณะที่บางตัวต้องรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานเพื่อที่จะสามารถติดตั้งเวอร์ชันใหม่ได้ เนื่องจากปัญหานี้ดูเหมือนจะเกิดขึ้นแบบสุ่ม หลายคนจึงมองว่ามันเป็นข้อบกพร่อง ตอนนี้เราค่อนข้างมั่นใจว่าปัญหานี้ไม่ได้เกิดจากข้อบกพร่อง แต่เป็นการใช้ API ใหม่ของ Google ใน Android 11 เพื่อบล็อกการอัปเดตจากไซด์โหลด

หากคุณพยายามไซด์โหลด Google Camera 8.0 หรือใหม่กว่า หรือ Google Recorder 2.0 หรือใหม่กว่า บนอุปกรณ์ Pixel ที่ใช้ Android 11 คุณจะเห็นข้อความแสดงข้อผิดพลาดแจ้งว่าการยืนยันไม่สำเร็จ แม้ว่าคุณจะพยายามไซด์โหลด APK โดยใช้คำสั่งเชลล์ คุณจะไม่ได้รับเหตุผลที่เจาะจงมากขึ้นสำหรับความล้มเหลวในการติดตั้ง รหัสส่งคืนการติดตั้งที่คุณจะได้รับคือ "

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 Camera ล้มเหลวเนื่องจาก "INSTALLER_NAME" ไม่ตรงกับ "com.android.vending" ซึ่งเป็นชื่อแพ็คเกจสำหรับ Google Play Store (ฉันพยายามติดตั้ง Google Camera 8.0 โดยใช้แอป APKMirror Installer ในราคาที่คุ้มค่า) ข้อความนี้ถูกเพิ่มลงในบันทึกของระบบโดย "AppIntegrityManagerServiceImpl" ซึ่งเป็นส่วนหนึ่งของฟีเจอร์ "App Integrity" ใหม่ของ Android ตามโค้ดใน AOSP ความสมบูรณ์ของแอปได้รับการออกแบบมาเพื่อมอบการตรวจสอบเพิ่มเติมอีกชั้น นอกเหนือจากการตรวจสอบลายเซ็น APK ที่มีอยู่ของผู้จัดการแพ็คเกจ ดูเหมือนว่า App Integrity API จะใช้ชุดของ กฎ เพื่อตัดสินใจว่าจะอนุญาตหรือปฏิเสธการติดตั้งหรือไม่ กฎต่างๆ จัดทำโดยแอประบบ ซึ่งเราเชื่อว่าเป็นบริการ Google Play และเป็นเช่นนั้น เก็บไว้ในไฟล์.

นอกจากนี้ความสมบูรณ์ของแอป ยังโทรมา อีกชั้นหนึ่งเรียกว่า SourceStampVerifier หาก "ประทับแหล่งที่มา" ถูกฝังอยู่ในข้อมูลเมตาของรายการ ตัวอย่างเช่น ต่อไปนี้คือสิ่งที่เราเชื่อว่าเป็น "แหล่งที่มา" จาก Manifest ของแอป Google Camera:

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

จากสิ่งที่เราสามารถบอกได้ แหล่งที่มาจะถูกใช้เพื่อตรวจสอบลายเซ็นของตัวติดตั้งแพ็คเกจ ตัวอย่างเช่น คุณไม่สามารถหลอก AppIntegrity ให้อนุญาตการติดตั้งได้แม้ว่าคุณจะทำก็ตาม ปลอมแปลง Play Store ในฐานะผู้ติดตั้ง

นอกเหนือจากนี้ เรายังไม่ทราบแน่ชัดว่า Google ใช้ AppIntegrity และ API ที่เกี่ยวข้องอย่างไรเพื่อบล็อกการอัปเดตไซด์โหลดของแอป Google Camera และ Google Recorder การตรวจสอบ APK ของ Google Play Services อย่างรวดเร็วเผยให้เห็นว่ากำลังใช้ 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 เพียงไม่กี่แอปที่ใช้รูปแบบ App Bundle (เช่น Google Camera และ Google Recorder) เท่านั้น การบล็อกการติดตั้งที่ไม่ใช่ Play Store แต่เราไม่รู้ว่าบริษัทจะขยายพฤติกรรมนี้ไปยังแอปอื่นๆ ของตนหรือไม่ เมื่อทั้งหมดเปลี่ยนเป็นรูปแบบ AAB แล้ว. นอกจากนี้เรายังพิจารณาด้วยว่าการเปลี่ยนไปใช้ App Bundle จำเป็นต้องติดตั้ง App Integrity หรือไม่ แต่เราพบว่า Google อยู่แล้ว มีวิธีแก้ปัญหา เพื่อจัดการเมื่อผู้ใช้พยายามติดตั้งแอปที่ไม่มีการแยกส่วนที่จำเป็นทั้งหมด ไม่ว่ากรณีจะเป็นเช่นไร เราไม่คิดว่า Google ตั้งใจที่จะบล็อกการโหลดแอปจากแหล่งไซด์โหลดทั้งหมด แม้ว่าเครื่องมือเหล่านี้จะอนุญาตให้ทำเช่นนั้นได้ก็ตาม

ขอขอบคุณนักพัฒนา vvb2060, aviraxp และ Quinny899 สำหรับความช่วยเหลือในบทความนี้ และขอขอบคุณซอฟต์แวร์ PNF ที่ให้ใบอนุญาตแก่เรา โปรแกรมถอดรหัส JEBซึ่งเป็นเครื่องมือวิศวกรรมย้อนกลับระดับมืออาชีพสำหรับแอปพลิเคชัน Android