ADB-Installation schlägt mit INSTALL_FAILED_TEST_ONLY fehl


199

Ich habe Probleme bei der Installation einer Apk auf meinem Gerät.

adb install <.apk>

Wenn Sie den obigen Befehl verwenden, wird Folgendes zurückgegeben:

5413 KB/s (99747 bytes in 0.017s)
        pkg: /data/local/tmp/AppClient.TestOnly.App3.apk
Failure [INSTALL_FAILED_TEST_ONLY]

Irgendeine Idee, was dieses Problem verursachen könnte?

Es erkennt das Gerät definitiv. Könnte es ein Problem mit der apk sein?

Antworten:


272

Sieht aus wie Sie benötigen ändern AndroidManifest.xml
ändern android:testOnly="true"zu android:testOnly="false"oder entfernen Sie dieses Attribut.

Wenn Sie das Attribut behalten möchten , android:testOnlywie trueSie verwenden können pm installBefehl mit -tOption, aber Sie können müssen pushzuerst die apk zu Gerät.

$ adb push bin/hello.apk /tmp/
5210 KB/s (825660 bytes in 0.154s)

$ adb shell pm install /tmp/hello.apk 
    pkg: /tmp/hello.apk
Failure [INSTALL_FAILED_TEST_ONLY]

$ adb shell pm install -t /tmp/hello.apk 
    pkg: /tmp/hello.apk
Success

Ich konnte das gleiche Problem reproduzieren und das oben genannte Problem wurde behoben.

Wenn sich Ihre APK außerhalb des Geräts befindet (auf Ihrem Desktop), würde der folgende Befehl dies tun:

$ adb install -t hello.apk

62
Sie müssen nicht adb push und pm installieren, sondern können den Schalter -t direkt nach dem Befehl adb install angeben: adb install -t -r package.apk
marioc64

keine Notwendigkeit mehr, die apk zu pushen Hinzufügen -t funktioniert in ADB-Installation funktioniert gut, für den vollständigen Befehl überprüfen Sie meine Antwort unten.
AmIT

adb push bin/hello.apk /tmp/funktioniert nicht für mich, adb push ./debug.apk /sdcard/temp/debug.apkgearbeitet
HendraWD

adb install -t app/build/outputs/apk/usUnitedStates/debug/app-usUnited-debug.apkarbeitete für mich.
Sulav Timsina

Vielen Dank. Das hat mein Problem gelöst. Meine App war eine System-App. Somit wurde -f benötigt. -f: Install package on the internal system memory.
Julian

95

Ich hatte ein ähnliches Problem mit Android Studio 3.0.0 Beta 7und konnte nicht mehr im Play Store veröffentlichen.

Wie hier angegeben: https://developer.android.com/studio/run/index.html

Hinweis: Mit der Schaltfläche Ausführen wird eine APK mit testOnly = "true" erstellt. Dies bedeutet, dass die APK nur über adb (das von Android Studio verwendet wird) installiert werden kann. Wenn Sie eine debuggbare APK möchten, die Benutzer ohne ADB installieren können, wählen Sie Ihre Debug-Variante aus und klicken Sie auf Erstellen> APK (s) erstellen.

Gleiches gilt für den Release-Build. Android Studio 3Sie müssen Build > Build APK(s)eine nicht testbare Release-Apk aufrufen, die Sie an den Store senden können.


6
Ich vermute, dass dies im Moment (Oktober / November 2017) die richtige Antwort für die meisten Leute ist, die hierher kommen. Vor AS 3 war das von "Run" produzierte APK auch außerhalb von AS installierbar, nein, ist es nicht.
Noamtm

Es gibt ein Update und es gibt noch einige Verbesserungen. Ich habe eine Weile
gebraucht, um

61

Fügen Sie das -tInstallationsflag wie im folgenden Screenshot hinzu:

Antwort ist in der roten Box


Das Beispielprojekt, das ich kompiliere, verwendet 'com.android.tools.build:gradle:2.4.0-alpha7' und wird nicht mit einer stabilen Version kompiliert. Nur das Hinzufügen von -t wie erwähnt löste das Problem für mich.
BubbaGum

7
Bitte erklären Sie, was -ttut.
rmtheis

3
In der ADB-Hilfe sehen Sie die Installation mit -t bedeutet
Testpakete

Der Bildschirm wird durch Klicken auf Konfigurationen bearbeiten im Dropdown-Menü des Moduls gestartet - zwischen Make and Run, Debug-Schaltflächen oben in der IDE: developer.android.com/studio/run/rundebugconfig.html
Gene Bo

56

In meinem Fall war dieser Fehler in einer instabilen Gradle-Version. Verwenden Sie einfach eine stabile Version von Gradle (nicht Alpha, nicht einmal Beta). Und es wurde für mich behoben


1
Den Tag gerettet! Die Gradle-Version wurde von 2.4.0-alpha3 auf 2.3.0
geändert

1
Der Preis, an der Blutungsgrenze zu bleiben ... Danke!
Ryan R

Kann jemand bestätigen, dass die Einstellung android: testOnly = "true" dies auch für instabile Gradle-Versionen behebt?
GPS

43

Nachdem Sie den ganzen Tag gesucht und gesucht haben, können Sie nur noch hinzufügen

android.injected.testOnly=false

in die Datei gradle.properties


28

Ich stimme Elisey zu. Ich habe den gleichen Fehler erhalten, nachdem ich mein Projekt in der 2.4-Vorschau geöffnet und dann dasselbe Projekt in Android Studio 2.3 geöffnet habe

Das Problem wurde behoben, indem diese Zeile in build.gradle von geändert wurde

classpath 'com.android.tools.build:gradle:2.4.0-alpha5'

zu

classpath 'com.android.tools.build:gradle:2.3.1'


12

füge diese Zeile zu deinen 'gradle.properties' hinzu

android.injected.testOnly=false

Vielen Dank! Dies wird auch das Problem mit dem Löffelläufer beheben!
Basim Sherif

11

Keiner der vorherigen Beiträge löst mein Problem. Folgendes passiert mit mir:
Normalerweise lade ich die App aus Android Studio, indem ich auf die Schaltfläche "Ausführen" klicke. Wenn Sie dies tun, würde Android eine App erstellen, die sich gut zum Debuggen, aber nicht zum Installieren eignet. Wenn Sie versuchen, mit zu installieren:

adb install -r yourapk

Sie erhalten eine Nachricht mit dem Titel:

Fehler [INSTALL_FAILED_TEST_ONLY]

In diesem Fall müssen Sie die apk neu erstellen, indem Sie zuerst den Build bereinigen und dann Build-> Build APK auswählen. Siehe das Bild unten:

bauen android apk

Dieses APK kann entweder über den Befehl adb install oder über andere Methoden installiert werden

Hoffe das hilft

David


Du bist ein Lebensretter. Ich hatte Probleme mit dem Release-Build (fehlerhafter Keystore) und wollte Debug-Builds an meine Tester verteilen.
Drulabs

Wenn Sie Appium verwenden, müssen Sie die "allowTestPackages": "true"Funktionen Ihres e2e-Schemas angeben .
Joshua Pinter

9

In meinem Fall wurde durch das Hochladen einer APK, obwohl sie mit einem Produktionszertifikat signiert war und eine Release-Variante war, über die Schaltfläche "Wiedergabe ausführen" von Android Studio generiert. Problem behoben, nachdem APK aus Gradle oder über die Menüoption APK erstellen generiert wurde.


1
Dies begann mit Android Studio 3.0, und Ihr Vorschlag hat es für mich behoben.
Sky Kelsey

9

Wenn Sie die apk testen möchten, fügen Sie einfach die -tBefehlszeilenoption hinzu.

Beispielbefehl:

adb install -t .\app-debug.apk

4

Ich sehe die akzeptierte Antwort, aber Sie müssen die apk nicht wirklich pushen und dann den Befehl auf der ADB-Shell ausführen. Die direkte ADB-Installation mit dem Flag -t funktioniert tatsächlich

adb install -t "Pfad zu apk in ur Computer"

Anhängen eines Screenshots als Referenz Geben Sie hier die Bildbeschreibung ein


3

Die einfachste Lösung, ohne auf eine ältere Gradle-Version zurückzugreifen, besteht darin, die Option '-t' in den Ausführungskonfigurationen hinzuzufügen (für die PM-Installation).

testOnly = 'false' hatte keinerlei Auswirkungen. Der Fehler wird durch die Alpha-Version des Gradle-Plugins verursacht, mit der das Debuggen von APK nur zu Testzwecken durchgeführt wird. Mit der Option -t kann eine solche APK installiert werden. Wenn Sie die Ausführungskonfiguration festlegen, wird APK wie gewohnt automatisch installiert.



2

Ich weiß nicht, ob es für irgendjemanden nützlich sein wird oder nicht, aber ich habe diese Fehlermeldung erhalten, als ich versehentlich versucht habe, mein Projekt mit der Test Gradle Plugin ( 'gradle:2.4.0-alpha5') Version in einer stabilen Android Studio Version ( 2.3nicht in ) zu erstellen und zu installieren2.4 preview 5 Version I zuvor heruntergeladen und installiert).

Als ich meinen Fehler bemerkte, startete ich die Vorschau der Android Studio-Version und sie erstellte und installierte mein Projekt ohne Probleme.


1

Obwohl ich sicher bin, dass Saurabhs Antwort für die meisten anderen Menschen funktionieren wird, wollte ich die zusätzlichen Schritte identifizieren, die ich unternehmen musste, um meine apk zu installieren.

Ich habe versucht, auf das Gerät zu pushen, mit folgendem Ergebnis:

? adb push AppClient.TestOnly.App3.apk \tmp\
failed to copy 'AppClient.TestOnly.App3.apk' to '\tmp\': Read-only file system

Nachdem ich mich umgesehen hatte, um die RW-Berechtigungen des Dateisystems zu ändern, führte ich die folgenden Befehle aus:

? adb shell
255|shell@android:/ $ su
shell@android:/ # mount -o remount,rw /
mount -o remount,rw /

Ich habe das bekommen, als ich wieder versucht habe zu pushen:

? adb push AppClient.TestOnly.App3.apk /tmp
failed to copy 'AppClient.TestOnly.App3.apk' to '/tmp': Permission denied

Ich konnte auf die SD-Karte schieben:

? adb push AppClient.TestOnly.App3.apk /sdcard/
3178 KB/s (99747 bytes in 0.030s)

Zu diesem Zeitpunkt konnte ich Saurabhs Befehl ausführen:

shell@android:/ # pm install -t /sdcard/AppClient.TestOnly.App3.apk
pm install -t /sdcard/AppClient.TestOnly.App3.apk
        pkg: /sdcard/AppClient.TestOnly.App3.apk
Success

1
Ich sollte hinzufügen, dass einige davon für andere möglicherweise nicht notwendig sind.
evve

Schätzen Sie den zusätzlichen Aufwand!.
Saurabh Meshram

1

Mein Befund ist wie folgt. Wenn ich mit der Android Studio-Benutzeroberfläche kompiliere und die APK generiere, kann ich nicht einfach

adb install <xxx.apk>

Es wird generiert Failure [INSTALL_FAILED_TEST_ONLY]

Ich muss es mit dem Gradle kompilieren, dh ./gradlew app:assembleRelease. Dann nur die generierte apk, dann kann sie nur installiert werden.

Dies liegt daran, dass die Android Studio-UI-Kompilierung nur Test-Apk für ein bestimmtes Gerät generiert, während ./gradlew app:assembleReleaseBefehl die eigentliche Apk-Generation ist, die auf allen Geräten installiert werden soll (und in den Playstore hochgeladen werden soll).


Bezieht sich auf medium.com/@elye.project/… , um das Problem besser zu verstehen.
Elye

1

Wie in der Dokumentation erwähnt :

Android Studio fügt dieses Attribut automatisch hinzu, wenn Sie auf Ausführen klicken

Um dein apk mit installieren zu können, musst adb install <path to apk file>du den Build vom Terminal zusammenbauen ./gradlew assembleDebugund mit adb installieren. Oder führen Sie es einfach aus ./gradlew installDebug, um es gleichzeitig auf dem Gerät zu erstellen und zu installieren.


1

Für mich hat es geklappt, die Gradle-Aufgabe 'sauber' auszuführen (unter: App, im Gradle-Bereich, normalerweise rechts) und das Projekt erneut auszuführen.


1

Erstellen Sie Ihre Distribution .apk aus Android Studio wie folgt

Build -> Apk (s) erstellen (für nicht signierten Build) Build -> Signierte APK generieren (für signierten Build)

Diese Option erstellt die APK mit der Option android: testOnly = "false", mit der Sie die APK über das Kommando explizit auf dem Gerät installieren können.

adb installiere yourBuilT.apk


1

Was für mich funktioniert hat, ist die Ausführung Refresh all Gradle projectsüber die GradleSymbolleiste im rechten Menü.

PFB den Screenshot von Android Studio.

  1. Wählen Sie Gradleim rechten Menü die Symbolleiste.
  2. Wählen Sie das RefreshSymbol

Dies löste das Problem für mich.

Screenshot von Android Studio


Danke Kumpel. Es begann nach dem Upgrade von Android Gradle auf 4. Die Bereitstellung der App direkt von Android Studio funktioniert einwandfrei, aber nicht, wenn das Terminal verwendet wird (ADB-Installation usw.). Nach dem Aktualisieren des Gradle, wie Sie es erwähnt haben, hat es funktioniert.
user3193413

@ user3193413 Schön zu hören, dass der Beitrag hilfreich war
Sunil

0

Ich habe versucht, externes Projekt, mit mehreren apk.

Der Befehl von Studio sah aus wie

adb install-multiple -r ....

Lösung -

  • Konsole auswählen
  • Aste Befehl mit -t

0

Entfernen Sie zuerst die instabile Version:

adb uninstall problematischer Paketname

;; und dann die apk neu installieren.


0

Android 3.6.2.

Build >> Build / Bundle apk >> Build apk

Es funktioniert gut.Geben Sie hier die Bildbeschreibung ein


0

In meinem Fall wurde das Problem mit Android Studio 4.0 behoben.

Zur Datei 'gradle.properties' hinzufügen;

android.injected.testOnly=false 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.