当前位置: 首页>>操作系统>>正文


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

从文 操作系统 , , , 去评论

问题描述

我有一个飞溅的活动,开始这样的另一个活动

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构造函数的字符串参数。相应的类与这样的splash字符串配对

   <?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>

这完美无瑕地UNTIL我重命名包名称。我通过使用重构来重命名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.Splash路径启动Splash活动,并且错误在那里,但是我找不到为什么使用这样的路径。

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

最佳解决办法

毕竟,IntelliJ IDEA中的错误。创建项目时,配置会自动检查启动功能并打印默认类的名称。当您更改包的名称时,重构不会更改仍指向旧类名的配置字符串。这就是为什么没有compile-time错误,但运行时错误。

如果他们可以在这个令人敬畏的IDE中解决这个问题,那么这些错误很难跟踪(这个错误是4个月才能实现错误的)。

android,intellij-idea,android-intent,intentfilter

次佳解决办法

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

  1. 关闭一室公寓

  2. 删除.idea /workspace.xml

  3. 启动工作室。

第三种解决办法

您是否注意到这种差异(对于清单中的包名称),

启动活动是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>

第四种办法

在我的情况下,我按照这里的所有答案,而且我也要清理缓存。我按照这些步骤:

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

参考文献

注:本文内容整合自google/baidu/bing辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:gxnotes#qq.com(#替换为@)。

本文由《共享笔记》整理, 博文地址: https://gxnotes.com/article/192145.html,未经允许,请勿转载。
Go