Mengamati perilaku yang sangat aneh ini dengan aplikasi Android. Skenario perkiraan:
- Versi A diinstal pada perangkat
- Aplikasi berfungsi dengan baik
- Versi B diinstal pada perangkat (B> A)
- Aplikasi berfungsi dengan baik
- Perangkat mati karena baterai habis
- Perangkat dihidupkan
- Versi A dari aplikasi berjalan pada perangkat lagi
Informasi tambahan:
- Aplikasi tidak didistribusikan melalui Google Play, tetapi diinstal di tempat melalui koneksi USB (CATATAN: aplikasi berjalan dalam produksi; itu tidak diinstal melalui AndroidStudio).
- Kios
- Android 5.1 (API 22)
Saya kira saya punya dua pertanyaan:
- Mengapa perangkat ini cache versi APK yang lebih lama (dan di mana ia menyimpannya)?
- Dalam keadaan apa aplikasi dapat memutar kembali ke versi sebelumnya seperti itu?
Edit (informasi lebih lanjut):
- Sepertinya setelah APK diputar kembali, aplikasi kehilangan beberapa izin (bahkan mungkin semua). Fungsi yang berfungsi sebelum roll-back berhenti bekerja karena SecurityException dilempar dari API Android. Ini terjadi meskipun versi Android ini belum memiliki izin runtime!
- Setelah browsing filesystem tablet, saya memang melihat APK beberapa aplikasi yang berada di bawah jalur yang sama:
/data/app/com.myapp-2/base.apk
,/data/app/com.myapp-3/base.apk
, dll
Hipotesis saya saat ini adalah bahwa pengurasan baterai menyebabkan tablet "mengatur ulang" keadaannya (misalnya, jam juga disetel ulang), dan ketika diaktifkan kembali, ini membingungkan antara APK aplikasi dan memuat yang salah.
Namun, saya tidak tahu mengapa itu melakukan itu, atau bagaimana mencegah perilaku ini.
Jawaban:
Jika Anda menggunakan Android Studio 3.5+, maka alih-alih lari instan, Anda cenderung menggunakan Terapkan Perubahan.
Ini memiliki cara pengiriman perubahan yang berbeda ke perangkat, tanpa menulis ulang apk, jadi masuk akal bahwa setelah reboot, apk yang akan Anda jalankan jika Anda menjalankan aplikasi secara langsung di perangkat, tidak ada hubungannya dengan yang satu yang sudah berjalan sebelumnya
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
sumber
Ini daftar paket yang diinstal pengguna:
Dan kemudian sepenuhnya uninstall sebelum menginstal ulang:
Dengan menjalankan instan dan tidak menerapkan APK patch (lihat
pm
output bantuan), ini mungkin menjalankan APK basis. Ini tidak mengembalikan apa pun, tetapi kemungkinan APK yang satu tanpa APK lainnya kelebihan beban (Android Studio mungkin mengotomatiskan aplikasi hot-patch, tetapi saat boot mungkin ini tidak terjadi). Tidak menggunakan jalankan instan menghapus pembaruan patch ini; dan ketika hanya ada satu APK, tidak ada lagi yang harus dijalankan.sumber
Kuncinya di sini adalah dalam kode versi. Ketika Anda menginstal versi baru, pastikan versi baru memiliki kode versi yang berbeda . OS Android menggunakan kode versi untuk membedakan antara berbagai versi APK yang sama sehingga, ini akan berhasil.
Tidak terlalu jelas mengapa rollback ini terjadi. Ini jelas merupakan masalah khusus perangkat yang aneh, namun demikian, banyak faktor yang dapat bertanggung jawab termasuk penginstal default perangkat, pengaturan penyimpanan / cache, memori perangkat, virus, dll.
Saya harap ini membantu. Selamat coding!
sumber