将Android应用程序的主Activity更改为其他名称后,“App not installed”

时间:2012-12-13 01:41:45

标签: android android-activity android-manifest

在我的应用的AndroidManifest文件中,主Activity的{​​{1}}一直是:

android:name

最近,我更改了应用程序以使用库。所有代码都已转移到库项目中,以便我可以提供免费和付费版本,两者都使用相同的代码(除了一些修改)。

现在清单文件中主android:name=".MainActivity" 的名称是:

Activity

不幸的是,用户现在报告他们无法再在手机上打开更新后的应用。 Android说:android:name="com.name.library.MainActivity"

经过一些搜索后,我found the cause for this problem here:您无法更改App not installed!的名称,而不会导致其他尝试使用此Activity个应用的应用出现问题。我想报告问题的用户已将我的应用程序放在他们的主屏幕上,并且启动器应用程序不再找到旧的Intent名称。这是真的吗?

但这是否会影响列出所有应用的菜单?实际上,Android应该在更新时更新Activity的名称,不应该吗?

如何解决这个问题?我唯一的想法是使用旧名称创建一个新的Activity,并在Activity中添加以下代码:

onCreate(...)

但这显然不是一个令人愉快的解决方案......

2 个答案:

答案 0 :(得分:3)

我猜你也可以使用activity-alias。

<activity-alias
        android:targetActivity="com.name.library.MainActivity"
        android:name=".MainActivity"
        android:label="@string/label"
        android:icon="@drawable/icon">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
    </intent-filter>
</activity-alias>

android:name应与旧活动名称匹配

答案 1 :(得分:2)

我认为你以错误的方式做出了改变。你没有这么多选择:从用户在主屏幕上放置应用程序的快捷方式开始,shorcut指的是特定的uri(you.old.package.MainActivity),我认为你唯一能做的就是你说的,即使不是一个愉快的解决方案。另一个解决方案是用户删除并重新创建应用程序的快捷方式,因为当应用程序更改内部结构时,启动的意图始终是具有意图过滤器的意图

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

在清单中宣布;所以重新创建快捷方式将解决问题。

您应该进行更改以便让旧项目成为库项目,并创建Lite和Pro项目以使用原始项目成为一个libray项目。 通过这种方式,您的活动的uri不需要更改