2

在我的AndroidManifest应用程序文件中, main一直是:Activityandroid:name

android:name=".MainActivity"

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

现在Activity清单文件中的主要名称是:

android:name="com.name.library.MainActivity"

不幸的是,用户现在报告他们无法再在手机上打开更新的应用程序。安卓 说:App not installed!

经过一番搜索,我在这里找到了导致此问题的原因:您无法更改Activity' 的名称而不会导致其他尝试将Intents 用于此应用的应用出现问题。我猜报告问题的用户已将我的应用程序放在他们的主屏幕上,并且启动器应用程序不再找到旧Activity名称。真的吗?

但这是否也会影响列出所有应用程序的菜单?实际上,Android 应该Activity在更新时更新 's name,不是吗?

以及如何解决这个问题?Activity我唯一的想法是使用旧名称创建一个新名称,并在onCreate(...)其中放置以下代码:

Intent i = new Intent(MainActivity.this, MainActivity.class);
i.setComponentName("com.app.library", "com.app.library.MainActivity);
startActivity(i);

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

4

2 回答 2

3

我想您也可以使用活动别名。

<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 应该与旧的活动名称匹配

于 2012-12-15T19:37:11.203 回答
2

我认为您以错误的方式进行了更改。您没有太多选择:因为当用户在他的主屏幕上放置您的应用程序的快捷方式时,该快捷方式指的是特定的 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 项目以使用原始项目成为库项目。这样,您的活动的uri就不需要更改

于 2012-12-15T18:36:20.033 回答