Android: Błędy które pojawiają się tylko na pojedynczych urządzeniach. Debugowanie i metody QA.

0

Mam aplikację Android, korzystającą z geolokalizacji, działającą bezproblemowo na wszystkich urządzeniach, które mam pod ręką (4 sztuki) na androidzie 4.4, 6 i 8. Działa również na każdej wersji AVD. U klienta jednak, na Galaxy S6 edge i S7, po pojawieniu się i zaakceptowaniu okienka dostępu do lokalizacji, aplikacja łapie ANR (app not responding).

Nie jestem tego błędu w żaden sposób powtórzyć. Nie mam fizycznego dostępu do urządzenia. Przekierowałem wszystkie logi i zapisałem na serwerze. Nic z nich jednak nie wynika. Ani na AWS test farm, ani Samsung Remote Test Lab, nie ma urządzeń, które potrzebuje (S6/S7).

Myślę nad implementacją Crashlytics, powinien chyba wypluć mi jakiś stacktrace, nie? Po drugie, myślę żeby razem z logami, wgrać na serwer też pliki "data/anr/.". Nie wiem jednak, czy jestem w stanie wyciągnąć je bezpośrednio z poziomu aplikacji, bez ADB.

W jaki sposób radzicie sobie, z błędami które występują tylko na ściśle określonych modelach urządzeń? Na ilu fizycznych urządzeniach testujecie swoje aplikacje?

3

Wolne myśli:
a) na 100% ANR jest łapane przez google play, może mógłbyś wrzucić aplikację na Alpha / Beta Channel i dać do zamkniętych testów klientowi? Info: https://support.google.com/googleplay/android-developer/answer/7002270
b) korzystałeś z Vysora? Jest w nim możliwość zdalnego debugowania aplikacji (działa na zasadzie adb). Dzięki temu naprawiłem jeden błąd na urządzeniu w pełni zdalnie.
c) ANR jest wywalana po 5 sekundach - to dość dużo. Móże mógłbyś zawęzić pole poszukiwań stosując https://developer.android.com/topic/performance/vitals/anr#strict_mode

Edit: co do fragmentacji i testów. Ja swój kod testuje na ... jednym urządzeniu. Do tej pory tylko raz był problem ze specyficznym urządzeniem - z kamerą. Kod jest napisany dość dobrze - aplikacja przeszła testy przez googla na kilku urządzeniach i nie mieli żadnych uwag.

0

Odpowiadając na Twoje pytanie co do Vysora:

  1. Wersja remote debugging jest płatna, ceny: https://www.vysor.io/#pricing - Korzystam z niego od kilku lat - zawiódł mnie dosłownie dwa razy.

  2. How to:
    a) pobierasz aplikację z https://www.vysor.io/download/ (jest też plugin do chroma, jednak z aplikacją działa on zdecydowanie lepiej -> https://chrome.google.com/webstore/detail/vysor/gidgenkbbabolejbgbpnhbimgjbffefm)
    b) Uruchamiasz aplikację - Vysora
    c) Podpinasz urządzenie - smartphona pod komputer, powinieneś widzieć podłączone urządzenia na liście.
    d) Klikasz na przycisk share
    e) Link do Twojego urządzenia jest skopiowany do schowka, przekazujesz go innej osobie
    f) Jeśli osoba docelowa ma zainstalowanego Vysora to on się uruchomi, jeśli nie ma i nie chce go instalować to można otworzyć w chromie - plugin sam się doinstaluje.
    g) Po wszystkim na ekranie pojawi się ~screen casting z urządzenia - uwaga można na nim normalnie pracować - można kursorem normalnie korzystać z urządzenia.
    h) Dla programistów: wywołując adb devices będziesz mieć link do urządzenia zdalnego. 

W Twoim przypadku - gdy to Ty jesteś developerem i chcesz mieć dostęp do urządzenia klienta:
To klient powinien zainstalować ~adb, aktywować opcje programisty na urządzeniu ( skoro będzie programistą pytanie czy będzie dalej z Tobą współpracować ;) ), zainstalować Vysora, w tym momencie pewnie podzielibyś się z nim Twoim kontem PRO. Reszta jak opisałem wcześniej: podłącza urządzenia, klikna na share, przesyła Ci link. Po podłączeniu urządzenia po Twojej stronie będziesz je widział w adb devices.

0

@lubie_programowac: Ok, w taki sposób udostępniam swoje urządzenie. Jak chciałbym uzyskać dostęp do urządzenia innej osoby, to muszę jej udostępnić swoje konto? Czy to tamta osoba musi kupić sobie premium?

Jeżeli czyta to ktoś kto korzystał z Crashlytics. Warto? Duża przewaga nad zwykłym zapisywaniem logów i tym co się pokazuje w konsole Google Play?

1 użytkowników online, w tym zalogowanych: 0, gości: 1