Fehler "activity-Klasse nicht vorhanden" beim starten der android-app mit adb shell am start
Nach adb install
-ing meine app kann ich überprüfen, dass es dort mit adb shell pm list packages AppName
:
Paket:Luft.com.client.AppName
Also ich wissen es da ist, aber wenn ich versuche, starten Sie es mit adb shell am start -a android.intent.action.MAIN -n air.com.client/.AppName
, bekomme ich diesen Fehler:
Starting: Intent { cmp=Luft.com.client/.AppName}
Fehler Typ 3
Error: Activity class - {air.com.client/Luft.com.client.AppName} existiert nicht.
Wenn es darauf ankommt, ist dies, wie Sie vielleicht bemerkt haben, eine AIR-app, die verpackt wurde, als Android-app. Irgendwelche Ideen? Hab ich da was verpasst irgendwo? Wenn ich aapt dump xmltree
ich kann sehen, dass meine .apk umfasst ein android.intent.action.MAIN
Eintrag im Vorsatz-filter-Knoten, für was es Wert ist.
Letztlich auch für die geistige Gesundheit Willen, mit dem gleichen Befehl template kann ich starten Sie die app " Einstellungen ohne Probleme:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
- Es gibt keine
air.com.client
Klasse. Der name der Klasseair.com.client.AppName
. - Sie sind gonna haben, um die spell it out für mich - was sollte der Befehl sein?
- Verwandte q stackoverflow.com/questions/28388523/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Watch out für
applicationIdSuffix
!!Bei der Verwendung
applicationIdSuffix
im bauen.gradle das suffix bezieht sich nur auf deinen Anwendungs-id, nicht um die tatsächliche Paket-Struktur in der generierten .apk, d.h. verweisen auf Ihre Tätigkeit der kurze Weg (.MainActivity
ist, statt dessen vollständig qualifizierten Namen) wird die Anwendungs-id-suffix auf den Pfad der Aktivität zu und damit wird Sie scheitern, um es zu suchen. E. g.:Mein application package name ist
my.application.package
, und ich habe dies in meinem app Modul bauen.gradle:Beim ausführen, sagen wir mal `MainActivity (die befindet sich im root-Paket) von der Kommandozeile aus:
tatsächlich aufgelöst wird
Aber
MainActivity
ist tatsächlich in der Lagemy.application.package.MainActivity
, nicht inmy.application.package.dev.MainActivity
, weilapplicationIdSuffix
ändert sich nur die Anwendungs-id, nicht der eigentliche package-Struktur, so schlägt es fehl, es zu finden.Daher sollten Sie die Aktivität der vollständig qualifizierte name:
Verwaltet, um es herauszufinden - ich ließ eine Eingabeaufforderung öffnen mit
adb logcat
, dann startete meine app auf dem Gerät der entsprechende Protokoll-Eintrag:Ich zusammen eine neue Befehlszeile:
... die genau das macht, was ich wollte. Ich werde ehrlich sein, ich verstehe nicht genau warum es funktioniert, aber das ist gut genug für jetzt.
Zumindest für mich das Problem gelöst war, sobald ich in einen vollständigen Pfad auf die Haupttätigkeit, die in der Anwendung manifest-Datei.
Statt:
Verwenden:
dann verwenden Sie die regulären:
Das problem ist zum schreiben nur den Namen der Aktivität, ohne es Paket
Falsch ist,
Zunächst sollten Sie geben Sie den Namen der Aktivität (nicht die Anwendung), und zweitens können Sie nicht geben Sie den Namen der Aktivität, ohne den Namen des Pakets .AppName allein würde nicht funktionieren. geben Sie air.com.client.AppName auch wenn die Aktivität ist in der exakt gleichen Paket wie die Anwendung Paket.
Diese würde wahrscheinlich funktionieren
Ich ein neues Projekt erstellt durch kopieren von einem anderen, bestehenden, und habe dieses problem. Keine der oben genannten Antworten geholfen als alles schien korrekt zu sein. Und was schließlich das Problem gelöst, in meinem Fall war nur ein Neustart des Andriod Studio.
Überprüfen Sie, dass in Ihrem Einsatzgebiet die in Ihrem Gerät nicht, hat die apk mit dem gleichen Namen. Die neuen Geräte von Papier bin und da ist das problem.