Ошибка типа 3 Ошибка: класс активности {} не существует


397

У меня есть проект IntelliJ Android, который я успешно импортировал в Android Studio 0.4.0. Это работает отлично, если я ничего не меняю в манифесте. Тем не менее, когда я хочу изменить активность запуска и запуска, он завершается с этой ошибкой:

Launching application: com.trackingeng/LandingActivity.
DEVICE SHELL COMMAND: am start -D -n "com.trackingeng/LandingActivity"  
    -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN  
    cat=[android.intent.category.LAUNCHER] cmp=com.trackingeng/LandingActivity }
Error type 3
Error: Activity class {com.trackingeng/LandingActivity} does not exist.

Когда я нажимаю « Синхронизировать проект с файлами Gradle» , он выдает:

Project Sync
The project 'TrackingEng' is not a Gradle-based project

Запустите настройки: введите описание изображения здесь


Где находится ваш оригинальный файл AndroidManifest.xml ?
twlkyao

Там же, под главной папкой в ​​проекте.
Джейкоб

Я имею в виду, является ли эта фотография в посте вашей оригинальной AndroidManifest.xmlили нет.
twlkyao

7
Я нашел тему, надеюсь, может помочь. stackoverflow.com/questions/19670607/…
twlkyao

4
Хотя это и неэффективно в случае с OP, Error: Activity class {...} does not exist.для меня решена синхронизация по Gradle .
динозавр

Ответы:


614

Я столкнулся с подобной проблемой после рефакторинга.
Вот что я сделал, чтобы решить эту проблему:

  1. Очистили проект
  2. Удалил Buildкаталог
  3. Перезапущенная Android Studio
  4. Перестройте проект
  5. Запустить
  6. По желанию (перейдите в меню «Файлы» на Android, нажмите «Invalidate Caches / Restart ...», удалите приложение на телефоне и повторите попытку)

И все работало нормально!
Я думаю, что ключ должен перезагрузить вашу IDE .

Надеюсь, это поможет вам или кому-то еще!

Редактировать 1:
Если вышеупомянутые шаги не работают для вас, то удаление кэша Gradle кажется решением, как отметили @Yasitha.

Редактировать 2
Как предложено несколькими пользователями в комментариях ниже, иногда проблему можно решить, полностью удалив и переустановив приложение с вашего устройства.
Просто введите adb uninstall <package>в терминал, чтобы полностью удалить приложение с устройства.

Редактировать 3
Как упоминалось в ответе Абхишека , следует также попытаться удалить приложение с вашего устройства, если на вашем устройстве настроено несколько пользователей.
Просто зайдите в Mobile Settings > Apps > [Your App] > More > Uninstall App for All Users

ОБНОВЛЕНИЕ для Android Studio 2.1 и выше

При запуске Android Studio 2.1 и выше вы также можете столкнуться с этой проблемой, если в настройках включена опция мгновенного запуска (включена по умолчанию).

Чтобы отключить эту опцию, перейдите к Preferencesопции в Android Studioверхнем меню и найдите, Instant Runчтобы вы могли снять первый флажок на этом экране.

Отключить мгновенный запуск в Android Studio 2.1+

Во всяком случае, это исправило это для меня. Первоначально указано пользователем @yusufonder. Я обнаружил, что это была проблема, так как установка Gradle все еще работала.


2
Он отлично работает даже без удаления каталога сборки.
Шивам Бхалла

12
Я должен был удалить кэш Gradle, как описано здесь stackoverflow.com/a/25602161/630833
jayeffkay

4
Хотя это поздняя запись, но я столкнулся с этой проблемой только после обновления Android Studio до 1.5, и вышеупомянутое решение не работает в моем случае.
Зулькарнайн шах

42
Попробуйте выполнить «adb uninstall <package>» в терминале, чтобы полностью удалить приложение с устройства
Михаил Шарин

3
В Android 7.0 при удалении приложения на устройстве (путем перетаскивания его на ярлык «Удалить» на главном экране устройства) приложение фактически просто «отключается». Вам нужно перейти в Настройки / Приложения и вручную удалить приложение оттуда (в качестве альтернативы используйте команду ADB). Я прыгаю в него пару раз, но через несколько секунд я забываю об этой так называемой функции Android 7.0.
Майк Кескинов

325

Может быть полезно для кого-то: -

Иногда при тестировании на устройстве приложение не удаляется должным образом . Чтобы проверить и исправить это:

  1. Зайдите в настройки .
  2. Перейти в приложения .
  3. Выберите ваше приложение. (здесь вы можете убедиться, что ваше приложение не удалено должным образом) .
  4. Откройте меню переполнения в правом верхнем углу и выберите Удалить для всех пользователей .
  5. Выполнено. Попробуйте установить и снова запустить приложение.

12
Используя предварительный просмотр 3 для разработчиков Android O, я не смог выполнить действие удаления для всех пользователей, так как оно сообщило мне, что приложение не существует в списке приложений. Бег adb uninstall {packageName}решил проблему.
alexbchr

1
Для эмулятора ответ Анкита не сработал. Я удалил свое приложение из панели запуска, но оно осталось в системе, что вызвало проблему. Мне пришлось использовать этот метод, чтобы полностью удалить его.
овощи

2
Спасибо, я столкнулся с этой проблемой на Android Oreo, где приложение не удаляется полностью успешно
Salman500

3
Это была именно моя проблема, приложение не было установлено для этого пользователя. Просто удалили его с помощью процедуры, описанной выше, и он начал работать
Bugs Happen

2
мое приложение было отключено
iamsujan

82

Я столкнулся бы с этой проблемой при удалении приложения через устройство (то есть при перетаскивании приложения в опцию «Удалить»). Но вот правильный способ удаления:

Используйте ./gradlew uninstallAllкоманду. Это предотвратит Error: Activity class {HomeActivity} does not exist.ошибку.

Обновить:

Если вы ленивы , вы можете использовать аббревиатуру для выполнения этой задачи: ./gradlew uA.

Или определите псевдонимы для общих задач на вашем компьютере .bash_profile, это сэкономит время, набирает текст, и вам не нужно будет помнить каждую команду и не беспокоиться о опечатках. Я предлагаю сделать это.


Как бы плохо это ни было, я все еще думаю, что это было лучше. Градл это мерзость ИМО.
JJF

4
Это единственное, что работало для меня с Android Studio 3.1 Canary 7.
NOTiFY

2
отличный ответ. Некоторые устройства, похоже, имеют проблемы с удалением. Для меня это Xiaomi Mi Mix 2 с EU Build. Я предполагаю, что это ошибка в версии сборки устройства.
Opiatefuchs

1
Это работает для меня. После запуска ./gradlew удалите все
Shanison

1
На начало 2020 года это было единственное решение, которое работало для меня.
PGMacDesign

73

Это происходит, когда вы делаете следующее

  • подключите ваше устройство / эмулятор
  • запустить приложение из Android Studio (AS)
  • используйте / протестируйте приложение и удалите его с устройства, пока оно еще подключено к компьютеру
  • попробуйте снова запустить приложение из AS

AS считает, что у вас все еще есть приложение на вашем устройстве.

tl; dr - Чтобы решить эту проблему, вы можете просто отключить устройство после удаления приложения и снова подключить его.


11
Хотя не позволяйте себе запутаться, если приложение не отображается в Launcher, просто проверьте настройки / Приложения -> «Все», если приложение указано в списке. Так было и с моим приложением, и после его удаления все снова заработало.
Даниэль Гилберт

1
Если он не отображается в Launcher, как сказал @DanielGilbert, вы можете легко удалить его с помощью "adb uninstall package.name". Это сработало и для меня.
Майк

Это сработало и для меня. У меня был пример проекта, который имеет две версии. Я установил первую версию, а затем удалил ее, чтобы установить вторую версию. Я потратил много времени, чтобы исправить ошибку. Это не первый раз, когда в разработке Android
Черт, Овощи,

Мое дело. Отключите и подключите устройство - это сработало для меня! Приложение не было на устройстве, но AS не установило его, думая, что приложение все еще находится на моем устройстве
Виктория Климова

35

Приложение уже установлено для другого пользователя. Пожалуйста, попробуйте удалить одно и то же приложение для всех пользователей. Тогда попробуй.

Или вы можете попробовать после запуска команды ADB.

adb uninstall PACKAGE_NAME

где PACKAGE_NAME - полное имя, например com.example.myapp


Это работает! в моем случае, adb uninstall com.demoгде имя моего приложения былоdemo
Мухаммед Ови

com.demo будет вашим именем пакета
Дипендра Шарма

3
Единственный ответ, который сработал! Android Studio 3.4.2, уровень API 28
ёнконда

Единственное решение. Спасибо!
Хуан Игнасио Барисич

убедитесь, что устройство подключено с помощью командыadb devices
G. Ciardini

33

У меня была такая же проблема, и вот как я ее исправил.

Перейдите в Gradle> Задачи> Установить> Удалить все

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


1
Это работает для меня. Спасибо.
Малвиндер Сингх

Это работает и для меня. Но почему проблема возникает и как uninstallAllбы решить? Спасибо.
LiuWenbin_NO.

У меня тоже сработало!
Пушистый Т Рекс

Это должен быть правильный ответ! Оптимально и эффективно
HatemTmi

27

У меня была такая же ошибка после переименования / рефакторинга. Я добавил applicationIdатрибут свойства в мой файл build.gradle и установил его значение в пакете приложения.

В build.gradle :

android {
defaultConfig {
    applicationId "com.example.myapp"  
  }
}

Пожалуйста, объясните, как добавить applicationId в buidl.gradle!
realtebo

Вы также можете добавить идентификатор приложения в настройки модуля приложения в качестве альтернативы
Майкл Керн,

19

Попробуйте изменить имя действия в вашем AndroidManifest.xmlфайле.

Прямо сейчас это говорит:

<activity android:name="LandingActivity" >

Попробуйте либо добавить точку в начале имени действия:

<activity android:name=".LandingActivity" >

Или добавив имя пакета в начало имени действия:

<activity android:name="com.trackingeng.LandingActivity" >

Также может быть проблемой то, что в имени вашего пакета есть только два компонента, разделенных точками (имя вашего пакета «com.trackingeng»; более стандартное имя пакета будет «com.trackingeng.app»)


2
@Siavash за исключением того, что это не Correct ™
dcow

2
Как так @dcow? Принятый ответ не сработал для меня, но этот сработал.
Сиаваш

Который из? добавить точку или трехуровневое имя?
realtebo

15

Выполните шаги ниже. Выберите «Мобильные настройки»> «Приложения»> «Ваше приложение»> «Дополнительно»> «Удалить приложение для всех пользователей».

Причина: поскольку у вас в телефоне несколько пользователей, и вы удалили это приложение только для одного.

НАСЛАЖДАТЬСЯ:


Я думаю, что выбранный ответ должен добавить это также. Это то, что сработало для меня.
jasxir

13

Я думаю, что еще одна причина этой проблемы заключается в том, что она не полностью удалена для всех пользователей на устройстве.

Зайдите в Настройки -> Приложения -> Ваши приложения -> Нажмите на 3 точки в правом верхнем углу -> Удалить для всех пользователей

Меня устраивает. Это происходит, особенно если вы меняете значки приложения или возитесь с файлом AndroidManifest.xml.


1
Я не могу поверить, что это сработало. У меня было 2 аккаунта на моем устройстве, и оно было установлено для другого пользователя.
StarWind0

да, это немного раздражает, но обычно это происходит, когда приложение находится в стадии разработки, потому что вы можете изменить загрузку иконок и прочее
Long Dao

12

Для меня проблема была в том, что AndroidStudio думал, что приложение все еще на устройстве.

Исправить это:

  1. перезапустите adbдемон ; в терминале или командной строке введите:

    adb kill-server
    adb start-server
  2. попробуйте запустить ваше приложение.

  3. если это все еще не работает, проверьте этот ответ .

убедитесь , убедитесь , что platform-toolsв Android SDK добавляется в список системных переменных пути !


11

В моем случае я удалил приложение с телефона, после этого началась проблема, но у меня сработала следующая команда.

Выполните команду ниже в терминале / cmd

adb uninstall <package_name>

имя_пакета что-то вроде com.example.applicationname Затем попробуйте переустановить приложение. Он должен работать.


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

9

для меня на Android 6, когда я удалил приложение, оно фактически отключилось вместо того, чтобы быть удаленным с устройства.

Настройки> Приложения> нажмите на ваше приложение и удалите

это исправило это для меня


Это работает, но еще несколько моментов. Если вы удалите его через adb, это не гарантирует, что проблема решена, если вы не видите этот пакет через adb pm. Вы должны сделать это руками, найти его в «Настройки» -> «Приложение» и выбрать «Удалить» для всех пользователей. После этого вы можете установить его снова
Silwester

9

Ниже команда сработала для меня. Иногда частичное удаление приложения также вызывает это.

Выполните команду ниже в терминале / cmd

adb uninstall <package_name>

Затем попробуйте переустановить приложение. Он должен работать.


7

Имейте в виду, что если на устройстве установлено несколько профилей, ваше приложение может уже существовать в одном из других профилей.

Удаление приложения из всех профилей решило проблему для меня.


6

Для меня это была очень специфическая проблема, у меня есть Lg g5 для тестирования моего приложения, и для сброса данных моих приложений я удалил его на телефоне, но у телефона есть «хорошая» функция, чтобы не удалять приложения немедленно, чтобы вы могли переустановить их в течение одного дня. Таким образом, приложение было установлено, но не использовалось ( отключено ) после полного удаления приложения из телефона, оно работало.


Работал на меня. У LG G6 та же «особенность» - я не нашел способа ее отключить.
Cililing

6

В моем случае это было потому, что приложение, которое я пытался запустить, было установлено для другого пользователя на устройстве. Перейдите в Настройки -> Приложения (Все приложения) и выберите приложение. Нажмите на меню переполнения и выберите «Удалить для всех пользователей». Это должно решить проблему.


Это тоже случилось, и мне пришлось перейти в «Настройки»> «Приложения и уведомления»> «Информация о приложении». Пришлось «удалить для всех пользователей» и установить заново.
luckylukein

Я столкнулся с той же проблемой, и, вероятно, ответ должен быть обновлен и этим решением
Panduka DeSilva

Эта ошибка возникла у меня, когда я настроил несколько типов сборки в моем проекте.
Рахул Растоги

6

Я использую Android Studio 3.2 Beta 5, столкнулся с той же проблемой

Перейти к

File -> Invalidate Caches / Restart...

Решил проблему для меня


6

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

Instant Run disable 

Build -> Clean Project

File -> Invalidate Caches / Restart

Но я нашел исключение в этот раз. Это решение не работает для меня. Тогда я узнаю, что проблема в эмуляторе наличных. Я просто делаю Wipe dataи Cold boot nowпроблема решена.

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


5

На всякий случай, если кто-то столкнется с моей проблемой и не повезет с другими решениями ... Я пытался запустить действие через adb для FireTV, отлаживая интеграцию с панелью запуска Amazon. Однако у моего проекта было 60 различных вариантов сборки (многоплатформенный, многозадачный проект), и ApplicationId не соответствовал ни одному из путей к классам, поскольку пакет времени выполнения (и пути к классам) отличались от applicationId.

Я пытался бежать adb shell am start -n com.myappid.example.packageone.packagetwo/com.myappid.example.packageone.packagetwo.MySplashActivity

(Конечно, я пробовал много комбинаций с com.runtimepath.example так как у меня была добавленная задача другого идентификатора приложения в моем build.gradle и другого во время выполнения)

Что, наконец, помогло это сообщение https://stackoverflow.com/a/36255727/5970652

Который выявил другой формат! com.myappid.example/com.runtimepath.example.packageone.packagetwo.MySplashActivity

Поэтому, если у вас есть другой путь к классу во время выполнения, попробуйте указать с помощью build.gradle applicationId до косой черты и пути к классу во время выполнения.

Вы также можете получить эти значения BuildConfig.APPLICATION_IDи, this.getLocalClassName()соответственно, если вы хотите войти в систему в logcat.


1
Это была именно моя проблема! Некоторое время я был разочарован, но однажды я поставил имя пакета приложения перед косой чертой и полное имя пакета / класса после косой черты, это сработало.
Чад Шульц

4

Даже у меня была такая же проблема, но ни одно из вышеперечисленных решений не помогло мне. Проблема заключалась в том, что я заморозил конкретное приложение, которое пытался запустить через Titanium Backup, из-за которого я получил вышеуказанную ошибку. Я пробовал как в Eclipse, так и в Android Studio.

После реализации я просто удалил приложение и снова запустил его.

Задача решена :-)


4

Я хотел бы поделиться трюком, который помог в моем случае. Я удалил приложение с устройства, и никакие операции очистки / восстановления / перезапуска Android Studio не помогли.

Поскольку Android Studio считает, что приложение все еще установлено на устройстве и не развертывает его, вы можете форсировать установку с помощью ADB:

adb install -r <your_application_from.apk>

где -rозначает переустановить приложение, сохранив его данные.


Это единственное, что сработало для меня, спасибо!
Хьюго

4

У меня Samsung Galaxy. Поиск в настройках выше не работал, потому что он вообще не отображался в моих настройках приложений.

Я нашел приложение на своем телефоне, введя название приложения в поле поиска. Я понял, что это было в профиле "Работа" (используя Mobile @ Work) и удалил его. Вы можете найти настройки для профиля, перейдя в Настройки-> Рабочий профиль-> Приложения

Я надеюсь, что это поможет кому-то, кто может не найти его так же, как многие другие ответы заявили, что его можно найти в настройках.


1
О боже, спасибо, ты спас мой день. Та же самая проблема с fckn samsung
Питер

4

Столкнулся с этой проблемой в android studio 3.5.1. У меня ушел день на решение этой проблемы, Перепробовал все, включая очистку кеша, перезапуск и переименование имени пакета. Так что, если что-то из вышеперечисленного не сработало, попробуйте это.

Просто зайдите в Gradle> Задачи> Установить> Удалить все

Вот ссылка: Тип ошибки 3: Класс активности {...} не существует


4

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

Кроме того, попробуйте выполнить следующую команду, чтобы удалить приложение и удалить пакет adb «Ваше имя пакета»


3

Я также столкнулся с той же проблемой где-то в прошлом. Такие проблемы на самом деле возникают, когда мы проводим некоторый рефакторинг, такой как - переименование, перемещение файлов в проекте и т. Д. Переименование и перемещение файлов требуют изменений в файле Gradle, поэтому при переименовании или перемещении какого-либо файла просто очищайте проект:

Построить -> Чистый проект

Очистка проекта просто удаляет файлы .class и перекомпилирует проект. По сути, это вызывает перестройку проекта.

Иногда ошибки такого типа не удаляются в проекте очистки, а затем попробуйте удалить приложение с устройства (будь то эмулятор или физическое устройство) и снова запустить приложение. Надеюсь, это поможет вам, это поможет мне 50% раз.

Примечание: - Всякий раз, когда вы получаете какую-либо ошибку, просто не переходите в Google, Очистите проект, если это не работает, сделайте то, что вы хотите Google.


3

У меня возникла та же проблема, и я решил ее, изменив рефакторинг своей панели активности, просто изменив имя класса, и это работает.


3

Я сталкиваюсь с подобной проблемой, пожалуйста, следуйте приведенным ниже инструкциям.
это поможет вам:

1- Очистите ваш проект
2 - Удалите каталог сборки
3 - Перезапустите Android Studio
4 - Перестройте проект
5 - он будет успешно запущен.

Спасибо


3

У меня есть LG Stylus, и в моем тестовом телефоне приложение не удаляется навсегда. В Настройках -> Приложение я нашел отладочное приложение (которое я пытаюсь установить и отладить с помощью AS) с отключенной надписью. Когда я удаляю приложение из телефона, ошибка исчезает.


Это не кажется ложью ответом мне.
mpaskov

3

В моем случае была следующая причина:

У меня 2 пользователя: я и Гость. и приложение было установлено на них обоих, но удалено только сначала.

когда я переключился на гостевой экран и удалил приложение оттуда, приложение установилось нормально.

надеюсь, это кому-нибудь поможет :)

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