ทำไมแอพ Android ย้อนกลับเป็นเวอร์ชันก่อนหน้าหลังจากปิดอุปกรณ์?


11

สังเกตพฤติกรรมนี้แปลกมากกับแอปพลิเคชัน Android สถานการณ์โดยประมาณ:

  1. รุ่น A ติดตั้งบนอุปกรณ์
  2. แอปพลิเคชั่นใช้ได้เลย
  3. รุ่น B ที่ติดตั้งบนอุปกรณ์ (B> A)
  4. แอปพลิเคชั่นใช้ได้เลย
  5. อุปกรณ์ปิดตัวลงเนื่องจากแบตเตอรี่หมด
  6. เปิดใช้งานอุปกรณ์
  7. เวอร์ชัน A ของแอปพลิเคชันทำงานบนอุปกรณ์อีกครั้ง

ข้อมูลเพิ่มเติม:

  • แอปพลิเคชันไม่ได้รับการแจกจ่ายผ่าน Google Play แต่ติดตั้งในสถานที่ผ่านการเชื่อมต่อ USB (หมายเหตุ: แอปพลิเคชันทำงานอยู่ในระหว่างการผลิต แต่ไม่ได้ติดตั้งผ่านทาง AndroidStudio)
  • ร้านเล็ก
  • Android 5.1 (API 22)

ฉันเดาว่าฉันมีคำถามสองข้อ:

  • เหตุใดอุปกรณ์จึงแคช APK ที่เก่ากว่า (และแคชอยู่ที่ใด)
  • แอปพลิเคชันใดที่สามารถย้อนกลับไปเป็นเวอร์ชันก่อนหน้านี้ได้

แก้ไข (ข้อมูลเพิ่มเติม):

  • ดูเหมือนว่าหลังจาก APK ถูกย้อนกลับแอปพลิเคชันจะสูญเสียสิทธิ์บางอย่าง (อาจเป็นได้ทั้งหมด) ฟังก์ชั่นที่ทำงานก่อนที่ roll-back จะหยุดทำงานเนื่องจาก SecurityException ถูกส่งออกมาจาก API ของ Android สิ่งนี้เกิดขึ้นแม้ว่า Android เวอร์ชันนี้จะไม่มีสิทธิ์ใช้งานรันไทม์!
  • หลังจากการเรียกดูระบบแฟ้มแท็บเล็ตของผมแน่นอนดู APK ที่หลายแอปพำนักอยู่ภายใต้เส้นทางที่คล้ายกัน: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apkฯลฯ

สมมติฐานปัจจุบันของฉันคือการที่แบตเตอรี่หมดทำให้แท็บเล็ต "รีเซ็ต" สถานะของมัน (ตัวอย่างเช่นนาฬิกาถูกรีเซ็ตด้วย) และเมื่อมีการขับเคลื่อนอีกครั้งมันจะทำให้เกิดความสับสนระหว่าง APK ของแอพและโหลดผิด

อย่างไรก็ตามฉันไม่มีเงื่อนงำว่าทำไมมันจะทำเช่นนั้นหรือวิธีการป้องกันพฤติกรรมนี้


ฉันต้องเผชิญกับพฤติกรรมนี้ด้วย อาจเกิดขึ้นเนื่องจากการเรียกใช้ทันทีที่แยก apk และรีสตาร์ทอุปกรณ์แบ่งกระบวนการและย้อนกลับไปเป็นเวอร์ชันก่อนหน้า
tudhid udoy

คุณใช้ผู้ใช้ที่แตกต่างกันในอุปกรณ์เหล่านี้หรือไม่? อาจจะเป็นเซสชั่นของผู้เข้าพักเพื่อหนึ่งหรือไม่
tynn

นี่อาจเป็นอุปกรณ์เฉพาะ (การตั้งค่าแคชเริ่มต้น) คุณได้ทดสอบอุปกรณ์อื่นแล้วหรือยัง?
Taslim Oseni

คุณทดสอบกับ android emulator หรือไม่?
Squti

@TaslimOseni มีแท็บเล็ตรุ่นหนึ่งที่ใช้สำหรับการปรับใช้ในพื้นที่ นอกจากนี้มันไม่ใช่สิ่งที่ทำซ้ำได้ง่าย เราเห็นมันแค่ครั้งเดียวในห้องแล็บ
Vasiliy

คำตอบ:


2

หากคุณใช้ Android Studio 3.5 ขึ้นไปแทนที่จะเรียกใช้ทันทีคุณมีแนวโน้มที่จะใช้การเปลี่ยนแปลงที่เกิดขึ้น

นี่เป็นวิธีที่แตกต่างกันในการจัดส่งการเปลี่ยนแปลงไปยังอุปกรณ์โดยไม่ต้องเขียน apk ใหม่ดังนั้นจึงมีความรู้สึกว่าหลังจากรีบูตเครื่อง apk ที่คุณจะรันถ้าคุณรันแอปโดยตรงบนอุปกรณ์ไม่มีอะไรเกี่ยวข้องกับอันใดอันหนึ่ง ที่ทำงานมาก่อน

ใช้การเปลี่ยนแปลง

เรียกใช้ทันทีและออกแบบสถาปัตยกรรมใหม่และนำมาใช้จากพื้นดินแนวทางปฏิบัติที่เป็นประโยชน์มากขึ้นใน Android Studio 3.5 เรียกว่าใช้การเปลี่ยนแปลง ใช้การเปลี่ยนแปลงใช้ API เฉพาะแพลตฟอร์มจาก Android Oreo และสูงกว่าเพื่อให้แน่ใจว่าพฤติกรรมเชื่อถือได้และสอดคล้องกัน การใช้การเปลี่ยนแปลงไม่ได้ปรับเปลี่ยน APK ของคุณ

https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html


ปัญหานี้เกิดขึ้นในการผลิตและไม่ได้ติดตั้งแอพลงในอุปกรณ์ผ่าน AndroidStudio การเรียกใช้หรือใช้การเปลี่ยนแปลงแบบทันทีต้องทำอะไรกับมัน
Vasiliy

โอ้ขอโทษด้วยฉันคิดอย่างนั้นเพราะคุณพูดถึง "แอปพลิเคชันไม่ได้เผยแพร่ผ่าน Google Play แต่ติดตั้งในสถานที่ผ่านการเชื่อมต่อ USB" ดังนั้นฉันจึงคิดเกี่ยวกับ Android Studio โดยอัตโนมัติ หลังจากการอัปเดตของคุณจะชัดเจน ฉันจะคิดเพิ่มอีกนิด ...
Carlos Robles

1

รายการนี้ผู้ใช้ติดตั้งแพคเกจ:

adb shell cmd package help

pm list packages -f -U -3 --show-versioncode

จากนั้นถอนการติดตั้งอย่างสมบูรณ์ก่อนที่จะติดตั้งใหม่:

adb uninstall com.myapp

ด้วยการเรียกใช้ทันทีและไม่ใช้ APK APK (ดูpmผลลัพธ์ช่วยเหลือ) สิ่งนี้อาจรัน APK พื้นฐาน นี่ไม่ใช่การย้อนกลับ แต่เป็นไปได้ว่ามี APK ตัวใดตัวหนึ่งที่ไม่มี APK มากเกินไป (Android Studio อาจทำให้แอปพลิเคชันฮอตแพทช์อัตโนมัติทำงานได้ แต่ในเวลาบูตอาจเป็นกรณีนี้) การไม่ใช้การเรียกใช้ทันทีจะลบ APK ที่เป็นอัปเดตเหล่านี้ออก และเมื่อมี APK เพียงอันเดียวก็จะไม่มีอะไรให้ทำงาน


3
ขออภัยไม่เห็นว่าสิ่งนี้ตอบคำถามของฉันได้อย่างไร ฉันสามารถไปและลบไฟล์เหล่านี้ด้วยตนเองผ่าน ADB แต่ ณ จุดนี้ฉันต้องการที่จะเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้น
Vasiliy

@Vililiy น่าจะเป็นเพราะ Dalvik VM จัดการ APK ที่แพตช์เรียกใช้ทันทีต่างกัน คำถามที่แท้จริงคือทำไมถึงมีอินสแตนซ์ต่างกันสองอันที่เหมือนกันในเวอร์ชันที่ต่างกัน
Martin Zeitler

ฉันไม่แน่ใจว่าสิ่งที่เรียกใช้ทันทีนั้นเกี่ยวข้องกับเรื่องทั้งหมดนี้ไหม APK ไม่ได้ติดตั้งผ่านทาง AndroidStudio ดังที่คุณพูดหนึ่งในคำถามคือ "ทำไมมี APK หลายอินสแตนซ์สำหรับแอปเดียวกัน" แต่ฉันไม่เห็นว่าคำตอบของคุณตอบอย่างไร ...
Vasiliy

@Vasiliy ไม่ควรมี APK หลายตัวขึ้นต้นด้วย - และถ้า, ต้องใช้ APK แก้ไขนี้ มีความแตกต่างระหว่าง "ใช้การเปลี่ยนแปลง" และเวลาบูต
Martin Zeitler

1

เหตุใดอุปกรณ์จึงแคช APK ที่เก่ากว่า (และแคชอยู่ที่ใด)

เคล็ดลับที่นี่อยู่ในรหัสรุ่น เมื่อคุณติดตั้งรุ่นใหม่ให้แน่ใจว่ารุ่นใหม่มีรหัสรุ่นที่แตกต่างกัน ระบบปฏิบัติการ Android ใช้รหัสรุ่นเพื่อแยกความแตกต่างระหว่างเวอร์ชันเดียวกันของ APK เดียวกันดังนั้นจะสามารถใช้งานได้

ไม่ชัดเจนว่าทำไมการย้อนกลับนี้เกิดขึ้น เห็นได้ชัดว่าเป็นปัญหาเฉพาะอุปกรณ์แปลก ๆ แต่ถึงกระนั้นก็มีหลายปัจจัยที่อาจต้องรับผิดชอบรวมถึงตัวติดตั้งเริ่มต้นของอุปกรณ์การตั้งค่าการจัดเก็บ / แคชหน่วยความจำอุปกรณ์ไวรัส ฯลฯ


ฉันหวังว่านี่จะช่วยได้. สุขสันต์วันรหัส!


1
เรายังไม่พบปัญหา แต่เนื่องจากคำตอบของคุณเป็นเพียงสิ่งเดียวที่สามารถในทางทฤษฎีมีส่วนเกี่ยวข้องความโปรดปรานเป็นของคุณ!
Vasiliy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.