Tại sao ứng dụng Android quay trở lại phiên bản trước sau khi tắt thiết bị?


11

Quan sát hành vi rất lạ này với ứng dụng Android. Kịch bản gần đúng:

  1. Phiên bản A được cài đặt trên thiết bị
  2. Ứng dụng hoạt động ổn
  3. Phiên bản B được cài đặt trên thiết bị (B> A)
  4. Ứng dụng hoạt động ổn
  5. Thiết bị tắt do hết pin
  6. Thiết bị đã bật
  7. Phiên bản A của ứng dụng chạy lại trên thiết bị

Thông tin bổ sung:

  • Ứng dụng không được phân phối qua Google Play, nhưng được cài đặt tại chỗ thông qua kết nối USB (LƯU Ý: ứng dụng chạy trong sản xuất; nó không được cài đặt qua AndroidStudio).
  • Ki-ốt
  • Android 5.1 (API 22)

Tôi đoán tôi đã có hai câu hỏi:

  • Tại sao thiết bị lưu trữ phiên bản cũ hơn của APK (và nó đã lưu bộ đệm ở đâu)?
  • Trong trường hợp nào các ứng dụng có thể quay trở lại các phiên bản trước như vậy?

Chỉnh sửa (thêm thông tin):

  • Có vẻ như sau khi APK được khôi phục, ứng dụng sẽ mất một số quyền (thậm chí có thể là tất cả). Chức năng hoạt động trước khi khôi phục ngừng hoạt động do SecurityException bị ném khỏi API của Android. Điều này xảy ra ngay cả khi phiên bản Android này chưa có quyền chạy!
  • Sau khi duyệt hệ thống tập tin máy tính bảng của, tôi thực sự thấy gói ứng dụng nhiều ứng dụng của cư dưới đường dẫn tương tự: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apkvv

Giả thuyết hiện tại của tôi là việc hết pin khiến máy tính bảng "thiết lập lại" trạng thái của nó (ví dụ, đồng hồ cũng được đặt lại) và khi được cấp lại, nó nhầm lẫn giữa các APK của ứng dụng và tải sai.

Tuy nhiên, tôi không biết tại sao nó sẽ làm điều đó, hoặc làm thế nào để ngăn chặn hành vi này.


Tôi cũng phải đối mặt với hành vi này. có thể điều này xảy ra do chạy ngay lập tức khi nó chia apk và khởi động lại thiết bị phá vỡ quy trình và quay trở lại phiên bản trước.
touhid udoy

Bạn đang sử dụng người dùng khác nhau trên các thiết bị này? Có lẽ một phiên khách đến một?
tynn

Đây có thể là thiết bị cụ thể (cài đặt bộ đệm mặc định). Bạn đã thử nghiệm trên các thiết bị khác?
Taslim Oseni

Bạn đã thử nghiệm nó trên trình giả lập Android?
Squti

@TaslimOseni, có một mẫu máy tính bảng cụ thể được sử dụng để triển khai tại chỗ. Ngoài ra, nó không phải là thứ dễ dàng tái tạo. Chúng tôi đã thấy nó chỉ một lần trong phòng thí nghiệm.
Vasiliy

Câu trả lời:


2

Nếu bạn đang sử dụng Android Studio 3.5+, thì thay vì chạy ngay lập tức, bạn có thể sử dụng Áp dụng thay đổi.

Điều này có một cách khác nhau để chuyển các thay đổi cho thiết bị, mà không cần viết lại apk, vì vậy, rất có ý nghĩa rằng sau khi khởi động lại, apk mà bạn sẽ chạy nếu bạn thực hiện ứng dụng của mình trực tiếp trên thiết bị, không liên quan gì đến ứng dụng đã chạy trước đó

Áp dụng các thay đổi

Chạy ngay lập tức và được kiến ​​trúc lại và triển khai từ một cách tiếp cận thực tế hơn trong Android Studio 3.5 có tên Áp dụng thay đổi. Áp dụng Thay đổi sử dụng API dành riêng cho nền tảng từ Android Oreo trở lên để đảm bảo hành vi đáng tin cậy và nhất quán; không giống như Instant Run, Áp dụng thay đổi không sửa đổi APK của bạn.

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


Sự cố này xảy ra trong sản xuất và ứng dụng không được cài đặt cho các thiết bị thông qua AndroidStudio. Chạy ngay lập tức hoặc thay đổi áp dụng phải làm gì với nó?
Vasiliy

ồ, xin lỗi, tôi đã giả sử như vậy vì bạn đã đề cập "Ứng dụng không được phân phối qua Google Play, nhưng được cài đặt tại chỗ qua kết nối USB" nên tôi tự động nghĩ về Android Studio. Sau khi cập nhật của bạn là rõ ràng. Tôi sẽ suy nghĩ thêm một chút ...
Carlos Robles

1

Danh sách này được cài đặt gói người dùng:

adb shell cmd package help

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

Và sau đó gỡ cài đặt đầy đủ trước khi cài đặt lại:

adb uninstall com.myapp

Với việc chạy ngay lập tức và không áp dụng APK vá (xem pmđầu ra trợ giúp), điều này có thể chạy APK cơ sở. Điều này không phục hồi bất cứ điều gì, nhưng có khả năng là một APK mà không có một APK khác bị quá tải (Android Studio có thể tự động hóa ứng dụng của bản vá nóng, nhưng tại thời điểm khởi động thì điều này có thể không xảy ra). Không sử dụng chạy ngay sẽ loại bỏ các bản cập nhật bản vá APK này; và khi chỉ có một APK, không có gì khác để chạy.


3
Xin lỗi, đừng xem cách này trả lời bất kỳ câu hỏi nào của tôi. Tôi cũng có thể tự xóa và xóa các tệp này thông qua ADB, nhưng tại thời điểm này, tôi muốn hiểu tại sao điều này xảy ra.
Vasiliy

@Vasiliy có thể vì Dalvik VM đang xử lý APK bản vá chạy ngay lập tức khác nhau. Câu hỏi thực tế là, tại sao thậm chí có hai trường hợp khác nhau được cho là giống nhau trong các phiên bản khác nhau?
Martin Zeitler

Tôi không chắc chắn những gì chạy ngay lập tức phải làm với tất cả điều này. Các APK không được cài đặt thông qua AndroidStudio. Như bạn nói, một trong những câu hỏi là "tại sao có nhiều phiên bản APK cho cùng một ứng dụng", nhưng tôi không thấy câu trả lời của bạn trả lời như thế nào ...
Vasiliy

@Vasiliy không nên có nhiều APK để bắt đầu - và nếu, thì phải áp dụng APK bản vá. Có một sự khác biệt giữa "áp dụng thay đổi" và thời gian khởi động.
Martin Zeitler

1

Tại sao thiết bị lưu trữ phiên bản cũ hơn của APK (và nó đã lưu bộ đệm ở đâu)?

Thủ thuật ở đây là trong mã phiên bản. Khi bạn cài đặt phiên bản mới, hãy đảm bảo phiên bản mới có mã phiên bản khác . Hệ điều hành Android sử dụng mã phiên bản để phân biệt giữa các phiên bản khác nhau của cùng một APK, do đó, điều này sẽ hoạt động.

Nó không thực sự rõ ràng tại sao rollback này xảy ra. Đây rõ ràng là một vấn đề cụ thể của thiết bị, tuy nhiên, hàng tấn các yếu tố có thể chịu trách nhiệm bao gồm trình cài đặt mặc định của thiết bị, cài đặt bộ nhớ / bộ nhớ cache, bộ nhớ thiết bị, vi rút, v.v.


Tôi hi vọng cái này giúp được. Chúc mừng mã hóa!


1
Chúng tôi vẫn chưa tìm ra vấn đề, nhưng vì câu trả lời của bạn là câu duy nhất có thể, về mặt lý thuyết, có liên quan, tiền thưởng là của bạn!
Vasiliy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.