Ik ben een applicatie aan het ontwikkelen, en elke keer dat ik deze start, krijg ik de melding:
Helaas is MyApp gestopt.
Wat kan ik doen om dit op te lossen?
Over deze vraag – uiteraard geïnspireerd door Wat is een stacktracering en hoe kan ik deze gebruiken om fouten in mijn toepassing op te sporen?, er zijn veel vragen die stellen dat hun toepassing is gecrasht, zonder enige verdere details. Deze vraag is bedoeld om beginnende Android-programmeurs te leren hoe ze hun problemen zelf kunnen oplossen of de juiste vragen kunnen stellen.
Antwoord 1, autoriteit 100%
Dit antwoord beschrijft het proces van het ophalen van de stacktracering. Heb je de stacktrace al? Lees meer over stacktraces in “Wat is een stacktracering en hoe kan ik deze gebruiken om fouten in mijn toepassing op te sporen?“
Het probleem
Uw toepassing is gestopt omdat er een niet-afgevangen RuntimeException
is gegenereerd.
De meest voorkomende hiervan is de NullPointerException
.
Hoe los je het op?
Telkens wanneer een Android-applicatie crasht (of welke Java-applicatie dan ook), wordt er een Stack trace
naar de console geschreven (in dit geval logcat). Deze stacktracering bevat essentiële informatie voor het oplossen van uw probleem.
Android Studio
Klik in de onderste balk van het venster op de knop Logcat
. Als alternatief kunt u op Alt kbd>+ 6 kbd>drukken. Zorg ervoor dat uw emulator of apparaat is geselecteerd in de Devices
paneel. Probeer vervolgens het stapelspoor te vinden, dat in rood wordt getoond. Er kunnen veel dingen zijn ingelogd in Logcat, dus misschien moet je een beetje scrollen. Een gemakkelijke manier om het stapelspoor te vinden is om de logcat (met behulp van de prullenbak aan de rechterkant te wissen) en laat de app weer crashen.
Ik heb het stapel trace gevonden, nu wat?
yay! Je bent halverwege het oplossen van je probleem.
U hoeft alleen maar te weten te komen wat uw aanvraagpunt niet heeft gemaakt, door het stapelspoor te analyseren.
Lees op stapelsporen in "Wat is een stapeltracatie en hoe kan ik het gebruiken om mijn aanvraagfouten te debuggen? "
Ik kan mijn probleem nog steeds niet oplossen!
Als u uw Exception
hebt gevonden en de lijn waar het is opgetreden, en nog steeds niet kan achterhalen hoe u het kunt oplossen, aarzel dan niet om een vraag op Stackoverflow te stellen.
Probeer zo beknopt mogelijk te zijn: plaats het stapelspoor en de relevante -code (bijvoorbeeld een paar regels tot op de lijn die de Exception
) gooide.
2, Autoriteit 16%
U kunt Google's adb-tool gebruiken om Logcat file
om het probleem te analyseren.
adb logcat > logcat.txt
Open logcat.txt
bestand en zoek naar uw applicatienaam. Er zouden informatie moeten zijn over waarom het is mislukt, het lijnnummer, de klasnaam, enz.
3, Autoriteit 5%
Eerst controleer je op welk punt je app is gecrasht (Unfortunately, MyApp has stopped.
). Hiervoor kunt u Log.e("TAG", "Message");
gebruiken, met deze regel kunt u uw app-log in logcat zien.
Daarna ontdekt u welk punt uw app is gestopt, het is heel eenvoudig aan uw zijde op te lossen.
Antwoord 4, autoriteit 4%
Controleer de fout in log cat.
Je krijgt de logkat-optie van in eclipse:
window->show view->others->Android->Logcat
Log kat bevat fout.
Anders kunt u de fout ook controleren door een toepassing in debug-modus uit te voeren.
Stel daarna eerst het breekpunt in door te doen:
klik met de rechtermuisknop op project->debug as->Android-toepassing
5, Autoriteit 2%
Controleer uw Logcat
Bericht en zie uw Manifest
Bestand. Er ontbreekt iets als het definiëren van de Activity,
Gebruikersrechten`, enz.
6, Autoriteit 2%
U kunt een van deze tools gebruiken:
ADB LOGCAT
ADB LOGCAT & GT; Logs.TXT (u kunt editors gebruiken om fouten te openen en te zoeken.)
Eclipse Logcat (zo niet zichtbaar in Eclipse, ga naar Windows- & GT; Bekijk weergave- & GT; Anderen- & GT; Android- & GT; Logcat)
Android Debug Monitor of Android-apparaatmonitor (Type-opdracht Monitor of open via UI)
- Android Studio
Ik raad aan om Android Debug Monitorte gebruiken, dat is goed. Omdat eclipse blijft hangen als er te veel logs zijn, en via adb logcat-filter en allemaal moeilijk.
Antwoord 7, autoriteit 2%
U moet de Stack trace
controleren
Hoe doe je dat?
op uw IDE Controleer het vensterformulier LOGCAT
Als je de logcat-vensters niet kunt zien, ga dan naar dit pad en open het
window->show view->others->Android->Logcat
als je Google-Api gebruikt, ga dan naar dit pad
adb logcat > logcat.txt
Antwoord 8, autoriteit 2%
In de onderstaande showToast()-methode moet je een andere parameter voor context of applicatiecontext doorgeven, zodat je het kunt proberen.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
9
Als uw app om een of andere reden crasht zonder goede stacktrace. Probeer het debuggen van de eerste regel en ga regel per regel totdat deze crasht. Dan heb je antwoord, welke regel je problemen veroorzaakt. Beveiligbaar zou je het dan kunnen wikkelen in Probeer Catch Block and Print Fout Output.
10
U kunt deze foutmelding ook op zichzelf krijgen, zonder een stapelveld of een ander foutbericht.
In dit geval moet u ervoor zorgen dat uw Android-manifest correct is geconfigureerd (inclusief enig kennerend samenvoeging die plaatsvindt van een bibliotheek en elke activiteit die uit een bibliotheek zou komen) en bijzondere aandacht besteden aan de eerste activiteit die in uw toepassing in uw aanvraag in uw aanvraag zou letten je manifest-bestanden.
11
Mensen maken fouten, en zo coderen ook.
Wanneer u ooit een error
hebt gebeurd, controleer dan altijd met de logcat met de tekst in rode kleur, maar u kunt het echt probleem in blauwe kleurtekst met onderstreping vinden. rode kleurtekst.
Zorg ervoor of u een nieuwe activity
maakt, altijd de activity
in de AndroidManifest
-bestand.
Als u toestemming toevoegt, verklaar deze dan ook in de AndroidMainifest
-bestand.
12
Logcat - Om de logboeken in de ontwikkelingsfase van Android Studio
te controleren
Wis aanvankelijk de logcat en laat de app weer crashen, zodat u alleen crashed log detail kunt krijgen. U moet het stapelpunt controleren
Hoewel, helaas is MyApp gestopt. Er zijn veel redenen voor. Je kunt hetzelfde in logboeken controleren. Hiervoor kunt u de log.e ("tag", "bericht") gebruiken;
Gemeenschappelijke fout tijdens de app-crash zoals:
- Coderingsfout (verkeerd gebruik van trefwoorden).
- Mismatch Property Name.
- niet-ondersteunde plug-in (misschien).
- Mismatch-versie (misschien).
- Activiteit ontbreekt in AndroidManifest-bestand.
- missing in AndroidManifest-bestand.
- meest voorkomende nullpointerexception.
- gedeclareerd maar niet gedefinieerd.
om de app-crashfout op te lossen:
- Houd hierboven in gedachten en ga er doorheen.
- Met de fout, ontvangt u de bestandsnaam ook in blauwe kleur (klik erop en spring naar code van fout is optreden).
13
Crash tijdens de ontwikkeling
Probeer mijn favoriete tool logview om de logboeken te krijgen en te analyseren Tijdens de ontwikkeling.
Zorg ervoor dat u ./logview
en ./lib/logview.jar
Als uitvoerbaar gebruikt bij het uitvoeren van Linux.
Als je het niet leuk vindt, is er veel alternatief Desktop Log Viewers voor Android .
Crash in het wild
Integreer een real-time crash rapportage-tool zoals firebase crosslytics om stapeltraces te krijgen van niet-verwerkte uitzonderingen die plaatsvonden op de apparaten van gebruikers.
Lees Hoe een buggy-app vrij te geven (en live om het verhaal te vertellen) om meer te weten over het hanteren van bugs in het veld.
14
Eerst moet u controleren waar en waarom uw app is gecrasht (Unfortunately, MyApp has stopped.).
Met behulp van LOG
, kunt u erkennen wat er mis ging.
Hierna vindt u welk punt uw app is gestopt met het oplossen van dat vanaf uw punt.
15
Als u geen enkele soort interessante log in uw terminal hebt (of ze zijn niet rechtstreeks gerelateerd aan uw app), is uw probleem misschien te wijten aan een inheemse bibliotheek. In dat geval moet u controleren op de "Tombstone" -bestanden binnen uw terminal.
De standaardlocatie voor de Tombstone-bestanden is afhankelijk van elk apparaat, maar als dat het geval is, heeft u een loggen: Tombstone written to: /data/tombstones/tombstone_06
Voor meer informatie, controleer dan https://source.android.com/devices/tech / debug .
16
Ook het uitvoeren van deze opdracht in terminal kan helpen het probleem te vinden:
gradlew build > log.txt 2>details.txt
Dan moet u naar de Locatie van de Gradlew-bestand gaan in Lees twee bovenstaande logbestanden.
17
Als uw app zonder fouten , en heeft gecrasht, gebruikte u geen Asset Manager , maar belaste de texturen zoals:
Texture texture = new Texture("myImage.png"); //dont to this all the time
Dan is dat het probleem. Ik had dat met mij gebeuren. U moet altijd een Asset Manager gebruiken om een geheugenoverbelasting te voorkomen.