错误类型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 2014年

在同一位置,项目的主文件夹下。
2014年

我的意思是帖子中的这张照片是否是您的原创照片AndroidManifest.xml
twlkyao 2014年

7
我找到了一个线程,希望能对您有所帮助。stackoverflow.com/questions/19670607/...
twlkyao

4
虽然在OP的情况下效果不佳,但是执行gradle同步Error: Activity class {...} does not exist.对我来说还是解决了。
恐龙

Answers:


612

重构后,我遇到了类似的问题。
这是我为解决此问题所做的事情:

  1. 清理项目
  2. 删除Build目录
  3. 重新启动Android Studio
  4. 重建项目
  5. (可选)(转到android上的文件菜单,单击“ Invalidate Caches / Restart ...”,在手机上卸载该应用,然后重试)

而且一切正常!
我认为关键是重新启动IDE

希望这对您或其他任何人有帮助!

编辑1:
如果上述步骤对您不起作用,那么删除@@ asisitha指出的Gradle缓存似乎是一个解决方案。

编辑2
正如一些用户在下面的评论中建议的那样,有时可以通过从设备中完全删除并重新安装该应用程序来解决该问题。
只需输入adb uninstall <package>终端即可从设备中完全删除应用。

编辑3
Abhishek的答案中所述,如果您的设备上设置了多个用户,则还应尝试从设备中删除该应用程序。
只需转到 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
即使不删除构建目录,它也能正常工作。
Shivam Bhalla'3

12
我确实按照此处所述删除了gradle缓存stackoverflow.com/a/25602161/630833
jayeffkay,2015年

4
虽然这是一个较晚的条目,但是我仅在将Android Studio更新到1.5后才遇到此问题,并且上述解决方案在我的情况下不起作用。
zulkarnain shah 2015年

42
尝试在终端中执行“ adb卸载<package>”,以从设备中完全删除应用程序
Mikhail Sharin

3
在Android 7.0上,当您在设备上卸载应用程序时(通过将其拖到设备主屏幕上的“卸载”标签上),该应用程序实际上只是“已禁用”。您需要转到“设置/应用程序”并从此处手动删除应用程序(或者使用ADB命令)。我弹了几次,但经过几口,我就忘了这个所谓的Android 7.0功能。
Mike Keskinov

325

可能对某人有帮助:-

有时在设备上进行测试时,该应用无法正确卸载。要验证并解决此问题:

  1. 转到设置
  2. 转到应用
  3. 选择您的应用。(在这里,您可以验证您的应用未正确卸载)
  4. 打开右上方的溢出菜单,然后为所有用户选择“ 卸载”
  5. 做完了 尝试安装,然后再次启动您的应用程序。

12
使用Android O开发人员预览版3,我无法执行“为所有用户卸载”操作,因为它告诉我该应用程序不在应用程序列表中。运行adb uninstall {packageName}解决了问题。
alexbchr

1
对于仿真器,Ankit的答案无效。我已经从启动器中删除了我的应用程序,但是它仍然保留在系统中,这导致了问题。我必须使用此方法将其完全卸载。
该死的蔬菜

2
thnx的人,我在未完全卸载应用程序的android oreo上遇到了这个问题
Salman500 '18

3
这正是我的问题,未为此用户安装应用。仅仅通过上述程序卸载它,并开始工作
错误恰巧

2
我的应用已禁用
iamsujan

81

通过设备卸载应用程序时(即将应用程序拖到“卸载”选项),我会遇到此问题。但这是卸载的正确方法:

使用./gradlew uninstallAll命令。这样可以防止Error: Activity class {HomeActivity} does not exist.错误。

更新:

如果您很懒,可以使用此任务的缩写: ./gradlew uA

或在您的常用gradle任务中定义别名.bash_profile,这样做可以节省时间和键入时间,并且您不必记住每个命令,也不必担心拼写错误。我建议这样做。


不好,因为那还是我觉得更好。Gradle是可憎的IMO。
JJF

4
这是唯一适用于Android Studio 3.1 Canary 7的
东西。– NOTiFY

2
好答案。某些设备似乎存在卸载问题。对我来说,这是带有EU Build的Xiaomi Mi Mix 2。我猜这是设备的构建版本中的错误。
Opiatefuchs

1
这对我有用。运行./gradlew卸载后
Shanison,

1
截至2020年初,这是唯一对我有用的解决方案。
PGMacDesign

73

当您执行以下操作时,会发生这种情况

  • 连接您的设备/仿真器
  • 从Android Studio(AS)运行应用
  • 使用/测试该应用,并在该设备仍连接到计算机时将其从设备上卸载
  • 尝试从AS重新运行该应用

AS认为您的设备中仍然有该应用程序。

tl; dr-要解决此问题,只需在卸载应用程序后重新连接设备并断开连接即可。


11
如果启动器中未显示该应用程序,尽管不要让自己感到困惑,但只要列出了该应用程序,只需检查设置/应用程序->“全部”即可。我的应用程序就是这种情况,删除之后,一切都恢复正常。
Daniel Gilbert

1
如果它未如@DanielGilbert所说出现在启动器中,则可以使用“ adb uninstall package.name”轻松卸载。这也对我有用。
迈克(Mike)

这也对我有用。我正在运行一个示例项目,该项目有两个版本。我安装了第一个版本,然后将其卸载以安装第二个版本。我已经浪费了很多时间来纠正错误。这不是Android开发人员第一次遇到这种奇怪的不可解决的问题……
Damn Vegetables

我的情况。断开并连接设备-这对我有用!该应用程序不在设备上,但AS并未安装该应用程序,以为该应用程序仍在我的设备中
Victoria Klimova

35

该应用程序已为另一个用户安装。请尝试为所有用户卸载同一应用。然后尝试。

或者您可以在运行adb命令后尝试。

adb uninstall PACKAGE_NAME

其中PACKAGE_NAME是全名,例如com.example.myapp


这可行!就我而言adb uninstall com.demo,我的应用名称是demo
Muhammad Ovi,

com.demo将是你的包名
迪彭德拉·夏尔马

3
唯一有效的答案!Android Studio 3.4.2,API级别28
ykonda

唯一的解决方案。谢谢!
Juan Ignacio Barisich

确保通过命令连接设备adb devices
G. Ciardini


27

重命名/重构后出现相同的错误。我所做的是将applicationIdproperty属性添加到build.gradle文件中,并将其值设置为应用程序包。

build.gradle中

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

请说明如何将applicationId添加到buidl.gradle!
realtebo

您也可以将应用程序ID添加到应用程序的模块设置中,作为替代方案
Michael Kern,

19

尝试更改AndroidManifest.xml文件中活动的名称。

现在它说:

<activity android:name="LandingActivity" >

尝试在活动名称的开头添加句点

<activity android:name=".LandingActivity" >

将包名称添加到活动名称的开头:

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

您的软件包名称中只有两个由句点分隔的部分也可能是一个问题(您的软件包名称为“ com.trackingeng。”;更标准的软件包名称为“ com.trackingeng.app”)


2
@Siavash,除非它不是正确的™
dcow

2
@dcow怎么样?这里接受的答案对我没有用,但是这个对我有用。
Siavash

哪一个?添加点或三层名称?
realtebo

15

请按照以下步骤操作:转到“移动”设置>“应用”>“您的应用”>“更多”>“为所有用户点击卸载应用”。

原因:因为您的手机中有多个用户,并且仅卸载了一个应用程序。

请享用:


我认为所选答案也应添加此内容。这是对我有用的东西。
jasxir

13

我认为发生此问题的另一个原因是,尚未为设备上的所有用户完全删除该问题。

转到设置->应用程序->您的应用程序->单击右上角的3个点->为所有用户卸载

这个对我有用。尤其是您更改应用程序的图标或弄乱了AndroidManifest.xml文件时,就会发生这种情况。


1
我不敢相信这行得通。我的设备上有2个帐户,并且已为其他用户安装了该帐户。
StarWind0

是啊,是有点讨厌,但它通常当应用程序正在开发中,因为你可能要改变加载图标和东西等情况的发生
龙岛

12

对我而言,问题在于AndroidStudio 认为该应用程序仍在设备上。

要解决这个问题:

  1. 重新启动adb守护程序;在终端或命令提示符下,输入:

    adb kill-server
    adb start-server
  2. 尝试启动您的应用。

  3. 如果仍然无法使用,请查看此答案

请确保在platform-tools的的Android SDK中被添加到您的系统路径变量


11

就我而言,问题开始后,我从手机上卸载了应用程序,但是以下命令对我有用。

在terminal / cmd中执行以下命令

adb uninstall <package_name>

package_name类似于com.example.applicationname,然后尝试重新安装该应用程序。它应该工作。


1
这对我有用,因为我以前是通过adb安装apk的,但是以某种方式通过手机的应用程序管理器将其卸载留下了一些应用程序痕迹。
dekaru

9

对我来说,在android 6上,当我卸载该应用程序时,它实际上已被禁用,而不是从设备中删除。

设置>应用>单击您的应用并卸载

这为我解决了


可行,但还有其他几点。如果您通过adb删除它,则不能保证问题得到解决,如果您没有通过adb pm看到此程序包,则无法保证。您必须手动操作,在“设置”->“应用”中找到它,然后为所有用户选择“删除”。之后,您可以重新安装
Silwester

9

下面的命令为我工作。有时,部分卸载应用程序也会导致此问题。

在terminal / 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 dataCold boot now问题就解决了。

在此处输入图片说明


5

以防万一有人遇到我的问题,并且对其他解决方案没有运气...我在调试Amazon启动器集成时尝试通过adb for FireTV启动一项活动。但是,我的项目有60个不同的构建变体(多平台,多应用程序项目),并且由于运行时包(和类路径)与applicationId不同,因此ApplicationId与任何类路径都不匹配。

我试图跑步 adb shell am start -n com.myappid.example.packageone.packagetwo/com.myappid.example.packageone.packagetwo.MySplashActivity

(当然,我尝试了很多组合,com.runtimepath.example 因为我在build.gradle和运行时遇到了另一个applicationId的挑战)

最终有用的是这篇文章https://stackoverflow.com/a/36255727/5970652

里面显示了不同的格式! com.myappid.example/com.runtimepath.example.packageone.packagetwo.MySplashActivity

因此,如果您具有其他运行时类路径,请尝试在斜杠前指定build.gradle applicationId,然后在斜杠后指定运行时类路径。

如果要将它们分别记录在logcat中,也可以分别从BuildConfig.APPLICATION_ID和获取这些值this.getLocalClassName()


1
这正是我的问题!我有些沮丧,但是一旦我将应用程序包名称放在斜杠之前,将标准包/类名放在斜杠之后就起作用了。
乍得·舒尔茨

4

甚至我也遇到了同样的问题,但是以上解决方案都不适合我。问题是,我冻结了试图通过Titanium Backup运行的特​​定应用程序,因此出现上述错误。我在Eclipse和Android Studio中都尝试过。

意识到之后,我只是松开了应用程序,然后再次运行它。

问题解决了 :-)


4

我想分享对我的案例有用的技巧。我从设备上卸载了该应用程序,但清理/重建/ Android Studio重新启动操作无济于事。

由于Android Studio认为该应用程序仍安装在设备上并且没有部署,因此您可以使用ADB强制安装:

adb install -r <your_application_from.apk>

在哪里-r意味着重新安装该应用程序,并保留其数据。


这是唯一对我有用的东西,谢谢!
雨果

4

我有一个三星Galaxy。无法在上述设置中进行搜索,因为它在我的Apps设置中根本没有显示。

通过在搜索字段中键入应用程序的名称,我在手机上找到了该应用程序。我意识到它位于“工作”(使用Mobile @ Work)配置文件中,并将其删除。您可以转到设置->工作资料->应用,找到资料的设置

我希望这可以帮助可能无法在设置中找到其他答案的人找到它。


1
天哪,谢谢你,你救了我的日子。fckn三星的同样问题
彼得·彼得,

4

面对Android Studio 3.5.1中的这个问题,我花了一天的时间解决此问题,并尝试了包括清理缓存,重新启动和重命名程序包名称在内的所有操作。因此,如果上述任何方法均无效,请尝试以下操作。

只需转到gradle>任务>安装> UninstallAll

这里是链接: 错误类型3:活动类{...}不存在


4

有时,应用程序会在您的手机上安装在来宾用户上,因此请尝试切换来宾并卸载该应用程序。

此外,尝试执行以下命令来卸载应用程序adb卸载程序包“您的程序包名称”


3

我过去在某个地方也遇到过同样的问题。当我们进行一些重构(例如,重命名,在项目内移动文件等)时,实际上会发生此类问题。重命名和移动文件需要更改gradle文件,因此无论何时重命名或移动文件,都只需清理项目即可:

构建->清洁项目

清理项目只会删除.class文件并重新编译项目。基本上,它会强制进行项目重建。

有时,这类类型的错误并未在清理项目中清除,然后尝试从设备(是仿真器还是物理设备)上卸载应用程序,然后再次运行该应用程序。希望对您有帮助,对我有50%的帮助。

注意:- 每当您遇到任何错误时,请不要去google,如果这不起作用,请清理项目,然后执行您想要的google。


3

我遇到了同样的问题,并且解决了它,它重构了我的活动启动器,只需更改类名即可。



3

我有LG Stylus,并且在我的测试手机中,应用程序不会永久删除。在“设置”->“应用程序”中,我找到了带有注释关闭功能的调试应用程序(尝试通过AS进行安装和调试)。当我从手机中删除应用程序时,错误消失了。


这似乎并不是我的答案。
mpaskov '16

3

就我而言,还有另一个原因:

我有2位用户:我和访客。和应用都安装在两者上,但仅在最初删除。

当我切换到来宾屏幕并从那里删除应用程序时,应用程序安装成功。

希望这会帮助某人:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.