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

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

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。 有任何想法吗? 它可以在清单中的第二个活动过滤?

  • Android:我可以以编程方式启用/禁用活动的意图filter吗?
  • Android IntentService不能实例化类; 没有空的构造函数
  • Android action.MAIN和category.LAUNCHER函数
  • BroadcastReceiver试图在非有序广播期间返回结果 - 在Android中PACKAGE_ADDED
  • 没有GUI的Android活动
  • 如何正确过滤Package取代的广播
  • Android Chrome自定义选项卡/ Fitbit Web API将不会redirect,如果应用程序已被授权。 (OAuth2.0的)
  • 用于http地址的Android Intent-Filter
  • 毕竟这个错误是在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 – >(您的包名称)