Сбой установки ADB с INSTALL_FAILED_TEST_ONLY


201

У меня проблемы с установкой apk на мое устройство.

adb install <.apk>

Использование приведенной выше команды возвращает следующее:

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

Любая идея о том, что может вызвать эту проблему?

Это определенно распознает устройство. Может ли быть проблема с apk?

Ответы:


274

Похоже , вы должны изменить свой AndroidManifest.xml
Изменить , android:testOnly="true"чтобы android:testOnly="false"или удалить этот атрибут.

Если вы хотите сохранить атрибут, android:testOnlyкак trueвы можете использовать pm installкоманду с -tопцией, но вам может понадобиться pushсначала apk для устройства.

$ 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

Я был в состоянии воспроизвести ту же самую проблему, и вышеупомянутое решило это.

Если ваш APK находится вне устройства (на вашем рабочем столе), то команда ниже сделает это:

$ adb install -t hello.apk

63
Вам не нужно устанавливать adb push и pm, вы можете указать ключ -t сразу после команды adb install: adb install -t -r package.apk
marioc64

больше не нужно нажимать apk, добавив -t работает в adb install отлично работает, для полной команды проверьте мой ответ ниже.
amIT

adb push bin/hello.apk /tmp/не работает для меня, adb push ./debug.apk /sdcard/temp/debug.apkработал
HendraWD

adb install -t app/build/outputs/apk/usUnitedStates/debug/app-usUnited-debug.apkработал на меня.
Сулав Тимсина

Спасибо. Это решило мою проблему. Мое приложение было системным приложением. Таким образом -ф был нужен. -f: Install package on the internal system memory.
Джулиан

95

У меня была похожая проблема, Android Studio 3.0.0 Beta 7и я больше не мог публиковать в магазине.

Как указано здесь: https://developer.android.com/studio/run/index.html

Примечание: кнопка Run создает APK с testOnly = "true", что означает, что APK может быть установлен только через adb (который использует Android Studio). Если вам нужен отлаживаемый APK, который пользователи могут установить без adb, выберите вариант отладки и нажмите «Build»> «Build APK (s)».

То же самое относится и к сборке релиза, с которой Android Studio 3вам нужно перейти Build > Build APK(s)на не тестируемый релизный apk, который вы можете отправить в магазин.


6
Я подозреваю, что прямо сейчас (октябрь / ноябрь 2017 г.) это правильный ответ для большинства людей, которые попадают сюда. До AS 3 APK, производимый «Run», можно было установить даже вне AS, нет, это не так.
noamtm

есть обновление и есть еще кое-что ... мне понадобилось время, чтобы понять это: /
ruben

61

Добавьте -tфлаг установки, как на скриншоте ниже:

ответ в красном поле


Образец проекта, который я компилирую, использует 'com.android.tools.build:gradle:2.4.0-alpha7' и не компилируется со стабильной версией, только добавление -t, как упомянуто, решило проблему для меня.
BubbaGum

7
Пожалуйста, объясните, что -tделает.
rmtheis

3
в справке по adb вы увидите установить с -t означает разрешить тестовые пакеты
xiaoyee

экран запускается нажатием кнопки «Редактировать конфигурации» в раскрывающемся меню модуля - между «Создать» и «Выполнить», кнопками «Отладка» в верхней части IDE: developer.android.com/studio/run/rundebugconfig.html
Джин Бо,

56

В моем случае эта ошибка была в нестабильной версии Gradle. Просто используйте стабильную версию Gradle (не альфа, даже не бета). И это было исправлено для меня


1
Спас день! Изменена версия Gradle с 2.4.0-alpha3 до 2.3.0
Reaz Murshed

1
Цена прилипания к кровоточащему краю ... Спасибо!
Райан Р

Кто-нибудь может подтвердить, что настройка android: testOnly = "true" исправит это и для нестабильных версий gradle?
GPS

43

После поиска и просмотра в течение всего дня, работает только одна

android.injected.testOnly=false

в файл gradle.properties


28

Я согласен с Елисей. Я получил эту же ошибку после открытия проекта в предварительном просмотре 2.4, а затем открытия того же проекта в Android Studio 2.3

Исправлена ​​проблема, изменяя эту строку в build.gradle из

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

в

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

18

Android студия 3.0 генерирует тест только APK.

Я решил проблему, добавив свойство «android: testOnly» в тег android manifest.

 <application
    .....
    android:testOnly="false"
    android:theme="@style/AppTheme">

А затем сгенерировал APK от Android studio3.0 меню: Build -> Build APK (s) .

Дополнительная информация: https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html



11

Ни один из предыдущих постов не решил мою проблему. Вот что происходит со мной:
я обычно загружаю приложение из Android Studio, нажимая кнопку «Выполнить». Когда вы сделаете это, Android создаст приложение, которое хорошо для отладки, но не для установки. Если вы попытаетесь установить с помощью:

adb install -r yourapk

вы получите сообщение, которое говорит:

Ошибка [INSTALL_FAILED_TEST_ONLY]

Когда это произойдет, вам нужно будет восстановить apk, сначала очистив сборку, затем выберите Build-> Build APK. Смотрите изображение ниже:

построить Android APK

Этот APK готов к установке с помощью команды adb install или любыми другими способами.

Надеюсь это поможет

Дэвид


Вы спасатель. У меня были проблемы со сборкой релиза (неисправное хранилище ключей), и я хотел распространять отладочные сборки своим тестерам.
drulabs

Если вы используете appium, вам необходимо указать "allowTestPackages": "true"возможности вашей схемы e2e.
Джошуа Пинтер

9

В моем случае, путем загрузки APK, он был подписан с помощью производственного сертификата и являлся вариантом выпуска, но был сгенерирован кнопкой запуска воспроизведения из студии Android. Проблема решена после генерации APK из Gradle или из опции меню Build APK.


1
Это начало происходить с Android Studio 3.0, и ваше предложение исправило это для меня.
Скай Келси

9

Если вы хотите проверить apk, просто добавьте параметр -tкомандной строки.

Пример команды:

adb install -t .\app-debug.apk

4

Я вижу принятый ответ, но вам не нужно нажимать apk, а затем запускать команду на оболочке adb. Прямая установка adb с флагом -t фактически работает

adb install -t "путь к apk в вашем компьютере"

прикрепление скриншота для справки введите описание изображения здесь


3

Проще всего решить эту проблему, не возвращаясь к более старой версии Gradle, - добавить опцию '-t' в конфигурации выполнения (для установки в pm).

testOnly = 'false' не имел никакого эффекта вообще. Ошибка вызвана альфа-версией плагина gradle, который делает отладочный APK «только для целей тестирования». Опция -t позволяет установить такой APK. Установка его в настройках запуска позволяет автоматически установить ваш APK как обычно.



2

Я не знаю, будет ли это полезно для кого-то или нет, но я получил это сообщение об ошибке, когда случайно попытался собрать и установить свой проект с версией test gradle plugin ( 'gradle:2.4.0-alpha5') в стабильной версии Android Studio (а 2.3не в2.4 preview 5 версии I скачал и установил раньше).

Когда я осознал свою ошибку, я запустил предварительную версию Android Studio, и он без проблем собрал и установил мой проект.


1

Хотя я уверен, что ответ Саураба будет работать для большинства других людей, я действительно хотел определить дополнительные шаги, которые мне пришлось предпринять, чтобы установить мой apk.

Я попытался нажать на устройство со следующим результатом:

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

Посмотрев вокруг, чтобы изменить разрешения файловой системы RW, я в итоге выполнил следующие команды:

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

Я получил это, когда попытался снова нажать:

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

Я был в состоянии нажать на SDCard:

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

В этот момент я смог выполнить команду Саураба:

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
Я должен добавить, что некоторые из этого могут не быть необходимыми для других.
evve

Цените дополнительные усилия!
Саураб Мешрам

1

Мой вывод, как показано ниже. Если я скомпилирую, используя пользовательский интерфейс Android Studio, и сгенерированный APK, я не могу просто

adb install <xxx.apk>

Это будет генерировать Failure [INSTALL_FAILED_TEST_ONLY]

Мне нужно , чтобы скомпилировать его с помощью Gradle то есть ./gradlew app:assembleRelease. Тогда только сгенерированный apk, тогда его можно только установить.

Это связано с тем, что в Android Studio UI Compile генерируется только тестовый apk для конкретного устройства, а ./gradlew app:assembleReleaseкоманда представляет собой фактическое поколение apk, которое нужно установить на все устройство (и загрузить в playstore).


Ссылка на medium.com/@elye.project/…, чтобы лучше понять проблему.
Elye

1

Как указано в документации :

Android Studio автоматически добавляет этот атрибут при нажатии кнопки «Выполнить»

Итак, чтобы иметь возможность установить ваш apk вместе с adb install <path to apk file>вами, вам нужно собрать сборку с терминала: ./gradlew assembleDebugи установить с помощью adb. Или просто запустите, ./gradlew installDebugчтобы собрать и установить на устройство одновременно.


1

Для меня это сработало, выполни задачу gradle 'clean' (под: app, на панели Gradle, обычно расположенной справа) и снова запусти проект.


1

Создайте свой дистрибутив .apk из Android Studio следующим образом

Build -> Build Apk (s) (для неподписанной сборки) Build -> Generate Signed APK (для подписанной сборки)

Эта опция строит APK с android: testOnly = "false", который позволяет вам установить APK точно в устройство.

adb установить yourBuilT.apk


1

То, что работало для меня, выполняет Refresh all Gradle projectsс Gradleпанели инструментов из правого меню.

PFB скриншот от Android Studio.

  1. Выберите Gradleпанель инструментов в правом меню.
  2. Выберите Refreshзначок

Это решило проблему для меня.

Скриншот из Android Studio


Спасибо друг. Это началось после обновления Android Gradle до 4. Развертывание приложения непосредственно из Android Studio работает нормально, но не при использовании терминала (установка ADB и т. Д.) После обновления Gradle, как вы упоминали, он работал.
user3193413

@ user3193413 Приятно слышать, что пост был
полезен

0

Я пробовал внешний проект, с несколькими apk.

Команда из студии, выглядела как

adb install-multiple -r ....

Решение -

  • выберите консоль
  • команда aste с -t

0

Сначала удалите нестабильную версию:

adb uninstall проблематичный-имя пакет

; а затем переустановите apk.



0

В моем случае, с помощью Android Studio 4.0, ниже решен вопрос;

Добавить в файл 'gradle.properties';

android.injected.testOnly=false 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.