包重命名和错误“活动类不存在”

我有一个启动另一个这样的活动的飞溅活动

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); final Thread splashThread = new Thread() { @Override public void run() { try { int wait = 0; while (_isActive && (_splashTime > wait)) { sleep(100); if (_isActive) { wait += 100; } } } catch (InterruptedException e) { Log.d(TAG, e.getMessage()); } finally { startActivity(new Intent("com.path1.path2.SomeActivity")); finish(); } } }; splashThread.start(); } 

要开始另一个活动,我使用Intent构造函数的string参数。 相应的类与这样的飞溅string配对

  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.path1.path2" android:versionCode="2" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4"/> <!--permissions--> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:label="@string/app_name" android:icon="@drawable/icon"> <activity android:name=".SplashActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".SomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="com.path1.path2.SomeActivity"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:name=".OtherActivity" android:label="@string/app_name" /> <!--services--> <service android:name=".AlarmService"/> </application> </manifest> 

这完美的工作,直到我重命名包的名称。 我使用重构来重命名Manifest中的包名,IDE将相应地重命名所有其他类。 但是当我想开始重新命名的项目,我面临一个错误

 Launching application: com.path1.pathOLD/com.path1.path2.SplashActivity. DEVICE SHELL COMMAND: am start -n "com.path1.pathOLD/com.path1.path2.SplashActivity" Starting: Intent { cmp=com.path1.pathOLD/com.path1.path2.SplashActivity } Error type 3 Error: Activity class {com.path1.pathOLD/com.path1.path2.SplashActivity} does not exist. 

似乎应用程序尝试使用OLDpath/NEWpath.Splashpath启动Splash活动,错误在那里,但我找不到为什么它使用这样的path。

我使用IntelliJ IDE。 有任何想法吗? 它可以在清单中的第二个活动过滤?

Solutions Collecting From Web of "包重命名和错误“活动类不存在”"

毕竟这个错误是在IntelliJ IDEA中。 在创build项目时,configuration会自动检查启动function并打印默认类的名称。 当您更改包的名称时,重构不会更改仍指向旧类名的configurationstring。 这就是为什么没有编译时错误,但运行时错误。

如果他们能够在这个出色的IDE中解决这个问题,那将是非常好的,因为这些错误很难追踪到(这个错误需要花费4个月的时间)。

这是Android Studio中的一个错误。 要解决这个问题:

  1. closures工作室。
  2. 删除.idea / workspace.xml
  3. 启动Studio。

你有没有注意到这个差异(对于清单中的包名)

启动活动是com.path1.pathOLD/com.path1.path2.SplashActivity.

更改清单文件中的包..使用这个修改后的清单,让我知道发生了什么..

编辑:修改的清单文件,

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.path1.path2" android:versionCode="2" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4"/> <!--permissions--> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:label="@string/app_name" android:icon="@drawable/icon"> <activity android:name=".SplashActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".SomeActivity" android:label="@string/app_name" > <intent-filter> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:name=".OtherActivity" android:label="@string/app_name" /> <!--services--> <service android:name=".AlarmService"/> </application> 

在我的情况下,我遵循从这里的所有答案,而且我不得不清理caching。 我遵循这个步骤:

 1. Go to ~/.gradle/ and delete caches folder rm -r caches 2. "Sync project with Gradle files" icon on Android Studio 3. Run project 

我在Eclipse / ADT中有相同的错误信息(通常当两个人使用不同的IDE工作在同一个项目上),并通过将包名称添加到Activity名称的开头 (以及所有其他Activities,Receivers ,服务等)在AndroidManifest.xml

在这个例子中,这意味着改变这个:

 <activity android:name=".SplashActivity" 

对此:

 <activity android:name="com.path1.path2.SplashActivity" 

我有这个问题,这是因为清单文件中的问题。 确保你的清单文件没有任何问题。

有同样的问题。 在尝试了这个线程中的所有内容之后,结果是Android Studio的即时运行。

禁用这个问题可以直接解决问题,就像删除.android / build-cache下的所有东西(如果你能find它的话)。 原因是即时运行似乎使用了应用程序的caching版本,甚至在常规的清理/重build过程中甚至没有被删除。

我也有这个问题,特别是当改变口味。 所以什么解决了我是在Android中禁用即时运行。 我想在这方面包括一些重要的观点,

  • 确保你的清单是好的。
  • 清理项目和重build项目的最大时间将解决问题。
  • 禁用2.1以上的Android工作室即时运行。
  • 卸载应用程序并重新安装。

确保您的包名称在Gradle,Manifest中相同。 进入模块设置 – >味道 – >应用程序ID – >(您的包名称)