Profesionalno otklanjanje grešaka i dijagnostika mobilnih aplikacija je ključna veština za mobilni razvoj, koja omogućava pronalaženje i ispravljanje grešaka u kodu. Prema JetBrains Developer Ecosystem (2024), programeri provode do 30% radnog vremena na otklanjanje grešaka u kodu. IT Sectr je razvio sopstvene dijagnostičke prakse koje smanjuju vreme traženja bagova za 40% pravilnom upotrebom alata za otklanjanje grešaka.
Glavno
Mobilne aplikacije se grade u dve glavne konfiguracije: Debug i Release. Debug izgradnja uključuje simbole za otklanjanje grešaka, ne optimizuje kod i koristi privremeni potpis — ovo omogućava postavljanje breakpoint-ova, pregledanje promenljivih i izvršavanje koda korak po korak.
Release izgradnja za mobilni razvoj je konačna verzija za App Store i Google Play. Release optimizuje kod, uklanja nepotrebne simbole i logove i potpisuje aplikaciju produkcijskim sertifikatom. Otklanjanje grešaka na Release je nemoguće — ako se bag reprodukuje samo na Release, potrebni su Crashlytics ili drugi izveštači o padovima.
Ispravna strategija za mobilne aplikacije: Debug za razvoj, Release za testiranje pre objavljivanja. IT Sectr preporučuje pokretanje Release izgradnje na test uređajima 2-3 dana pre izdanja kako bi se identifikovali problemi koji se ne pojavljuju u Debug režimu (na primer, obfuskacija koda ili ProGuard/R8 greške).
Debuggable=false je obavezna postavka za Release u AndroidManifest. iOS Debug i Release se razlikuju po šemi izgradnje u Xcode — Debug uključuje Debug executable, Release ne. iOS takođe ima konfiguraciju TestFlight (sa izveštajima o padovima) i App Store.
Android Studio pruža kompletan set alata za otklanjanje grešaka i dijagnostiku mobilnih aplikacija na Android platformi. Logcat je konzola sistemskih logova Android, glavni alat za pregled logova, filtrira se po nivou (Verbose, Debug, Info, Warn, Error), procesu i oznaci.
Logcat prikazuje logove svih procesa na uređaju ili emulatoru. Svaki log ima nivo prioriteta, oznaku i poruku — koristite Log.d(TAG, message) za poruke o otklanjanju grešaka, Log.e za greške. Filtriranje po oznaci je najbolji način da pronađete svoje logove među hiljadama sistemskih poruka.
Primer izlaza loga u mobilnom razvoju na Android:
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate started");
try {
initComponents();
Log.i(TAG, "Components initialized successfully");
} catch (Exception e) {
Log.e(TAG, "Failed to init components", e);
}
}
Layout Inspector — vizuelni dbager UI za Android, prikazuje hijerarhiju View, atribute svakog elementa i njegovu poziciju na ekranu. Omogućava proveru layout parametara, padding-a, margina, vidljivosti i veličine teksta na radnoj aplikaciji.
Database Inspector — pregled i uređivanje SQLite baza podataka direktno u Android Studio, prikazuje sadržaj svih tabela, omogućava izvršavanje SQL upita i menjanje podataka u realnom vremenu — nezamenljiv alat za otklanjanje grešaka Room upita i ContentProvider.
Network Inspector — prati sve HTTP zahteve aplikacije, prikazujući URL, zaglavlja, telo zahteva i odgovora, vreme izvršavanja i statusni kod. Pomaže u otklanjanju grešaka REST API, proveri ispravnosti serijalizacije i otkrivanju sporih zahteva.
Sveobuhvatno otklanjanje grešaka i dijagnostika mobilnih aplikacija na Android zahteva poznavanje svih navedenih alata. Android Studio ih kombinuje u jednom IDE za veću efikasnost.
Xcode pruža sličan set alata za otklanjanje grešaka i dijagnostiku mobilnih aplikacija na iOS. Console je pandan Logcat za iOS, prikazuje logove sistema i aplikacije grupisane po kategoriji i nivou (OSLogType).
Memory Graph Debugger je vizuelni alat za otkrivanje retain cycles i curenja memorije, prikazuje graf svih objekata u memoriji sa njihovim referencama. Crveni čvorovi ukazuju na curenja — objekte koji su trebali biti oslobođeni ali su još u memoriji.
Korišćenje Memory Graph: pokrenite aplikaciju, kliknite na dugme Debug Memory Graph u Xcode, izaberite objekat i pregledajte njegove dolazne reference. Retain cycle izgleda kao kružna zavisnost: objekat A drži objekat B, objekat B drži objekat A. Rešenje je korišćenje weak ili unowned referenci u zatvaranjima.
View Hierarchy Debugger je pandan Layout Inspector za iOS, prikazuje 3D vizuelizaciju svih UIView na ekranu sa njihovom hijerarhijom, ograničenjima i atributima. Omogućava odabir bilo kog elementa i prikaz njegove pozicije, boje, veličine i layout ograničenja.
Heap Dump je snimak cele memorije aplikacije, čija analiza pomaže u pronalaženju objekata koji se ne oslobađaju i proceni ukupne upotrebe memorije svake klase. U Xcode, Heap Dump je dostupan putem Memory Report u Debug Navigator.
LLDB je niskonivojski dbager za aplikacije u C, Objective-C i Swift, koji podržava breakpoint-ove, watchpoint-ove, asemblerski dump i dinamičku promenu promenljivih. Komanda po (print object) u LLDB prikazuje opis bilo kog objekta u memoriji.
Watchpoint je tačka zaustavljanja koja se aktivira kada se promeni vrednost promenljive, korisna za praćenje ko i kada menja vrednost polja objekta. Za razliku od breakpoint-a, koji se aktivira na određenoj liniji, watchpoint se aktivira na bilo koju promenu memorije.
Profesionalno otklanjanje grešaka i dijagnostika na iOS zahteva iskustvo sa Xcode i razumevanje upravljanja memorijom. Apple pruža potpunu dokumentaciju za svaki alat za otklanjanje grešaka.
Proxy alati su obavezni deo dijagnostike mrežnih problema mobilnih aplikacija. Charles Proxy je najpopularniji HTTP proxy za mobilni razvoj, koji omogućava presretanje, pregledanje i modifikovanje zahteva između aplikacije i servera.
Charles Proxy radi kao posrednik: konfigurišete uređaj da koristi Charles kao proxy (obično IP računara, port 8888). Charles prikazuje sve HTTP i HTTPS zahteve sa mogućnošću pregleda zaglavlja, tela, kolačića i vremena izvršavanja. SSL Proxy omogućava dešifrovanje HTTPS saobraćaja za analizu.
Mogućnosti Charles: Breakpoints (zaustavljanje zahteva za uređivanje), Rewrite (automatska izmena zahteva), Map Local (zamena odgovora lokalnim fajlom). Map Local je nezamenljiv za testiranje bez realnog API — vraćate unapred pripremljen JSON umesto odgovora servera.
Proxyman je moderna alternativa Charles za macOS sa čistijim interfejsom, boljom podrškom za M1 i M2 i zaštitom privatnosti. Podržava iste funkcije: presretanje, SSL proxy, uređivanje zahteva i skripte za automatsku modifikaciju saobraćaja.
Wireshark je profesionalni analizator saobraćaja za dubinsku dijagnostiku mreže, analizira sve OSI slojeve: TCP, DNS, TLS rukovanje, ICMP. Koristi se za dijagnostiku sporih veza, DNS problema i niskonivojskih mrežnih grešaka.
Stetho je biblioteka od Facebook za otklanjanje grešaka Android aplikacija kroz Chrome pretraživač, omogućava pregled baze podataka, mrežnih zahteva, View Hierarchy i Shared Preferences putem Chrome DevTools. Flipper je naslednik Stetho sa podrškom za iOS i arhitekturom dodataka.
API klijenti se koriste za otklanjanje grešaka i dijagnostiku bekenda mobilnih aplikacija bez pokretanja same aplikacije. Postman je najpopularniji API klijent sa kolekcijama, testovima i automatizacijom, koji omogućava slanje GET, POST, PUT, DELETE zahteva i upravljanje zaglavljima, kolačićima i promenljivama okruženja.
Insomnia je lagana open-source alternativa Postman sa bržim interfejsom, ugrađenom podrškom za GraphQL i boljom organizacijom kolekcija. Podržava dodatke: teme, izvoz, generisanje koda na različitim jezicima.
Httpie je konzolni HTTP klijent sa čitljivim izlazom, prikazuje obojeni JSON odgovor, zaglavlja i status direktno u terminalu. Pogodan za brze provere API bez otvaranja GUI aplikacije.
Primer korišćenja Httpie:
http POST https://api.example.com/v1/users \
"Authorization: Bearer token123" \
name="John" email="john@example.com"
IT Sectr preporučuje kombinaciju: Postman za analizu i dokumentaciju API + Httpie za brze provere. Uvezite Postman kolekciju iz Swagger ili OpenAPI specifikacije — ovo garantuje da testirani endpoint-ovi odgovaraju serverskoj dokumentaciji.
| Alat | Platforma | Tip otklanjanja grešaka | Besplatan | Najbolja primena |
|---|---|---|---|---|
| Logcat | Android | Logovanje | + | Pregled logova aplikacije i sistema |
| Layout Inspector | Android | UI/View | + | Provera hijerarhije View i atributa |
| Memory Graph | iOS | Memorija | + | Dijagnostika curenja memorije |
| View Hierarchy | iOS | UI/View | + | 3D vizuelizacija UIView |
| Charles Proxy | iOS/Android | Mreža | 30 dana proba | Presretanje HTTP/HTTPS saobraćaja |
| Proxyman | iOS/Android | Mreža | + (ograničen) | Moderni HTTP proxy za macOS |
| Wireshark | Sve platforme | Mreža (dubinski) | + | Analiza svih OSI slojeva |
| Postman | Sve platforme | API | + | Testiranje REST/GraphQL API |
| Insomnia | Sve platforme | API | + | Alternativa Postman sa GraphQL |
| LLDB | iOS/macOS | Niski nivo | + | Koračno otklanjanje grešaka, asembler |
Često postavljana pitanja
Debug izgradnja sadrži simbole za otklanjanje grešaka, ne optimizuje kod i koristi privremeni potpis. Release izgradnja optimizuje kod, uklanja logove, obfuscira i potpisuje produkcijskim sertifikatom. Debug se instalira preko USB ili emulatora, Release — preko App Store ili Google Play.
Koristite Memory Profiler u Android Studio — prikazuje dodeljene i oslobođene objekte i GC događaje. Uradite Heap Dump i analizirajte objekte koji se ne oslobađaju. Tražite Activity i Fragment instance koje ostaju u memoriji nakon finish(). Koristite LeakCanary — biblioteka automatski otkriva curenja.
Na računaru: uključite SSL Proxying u Charles (Proxy → SSL Proxying Settings). Na uređaju: instalirajte Charles CA sertifikat (chls.pro/ssl) i verujte mu u podešavanjima. Na iOS 13+ uključite poverenje sertifikatu u General → About → Certificate Trust Settings. Na Android 7+ je potrebna konfiguracija network_security_config.xml.
Breakpoint zaustavlja izvršavanje na određenoj liniji koda. Watchpoint zaustavlja izvršavanje kada se promeni vrednost promenljive. Breakpoint se aktivira svaki put kada se dođe do linije, watchpoint se aktivira pri bilo kojoj promeni praćene memorije. Watchpoint je koristan za pronalaženje neočekivanih promena polja.
Koristite Apollo DevTools (proširenje pregledača) ili Insomnia sa podrškom za GraphQL. Charles i Proxyman presreću GraphQL zahteve kao obične HTTP POST — možete pregledati upite, promenljive i odgovore. Za detaljno otklanjanje grešaka — Apollo Client Developer Tools.
Sažetak
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.