【问题标题】:Changing launcher Activity name in a new application version在新的应用程序版本中更改启动器活动名称
【发布时间】:2012-03-15 02:04:28
【问题描述】:

我开发了一个新版本的应用程序,并更改了启动的活动的名称。

在升级之前,清单中是:

    <activity
              android:name=".Splash"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:theme="@android:style/Theme.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

然后我只更改了活动的名称和包,现在是:

    <activity
              android:name=".view.SplashActivity"
              ... >
                    ...
    </activity>

发生的情况是人们从市场上下载应用程序后,启动器没有刷新,它仍然调用到活动的旧路径。

你知道怎么解决吗?

【问题讨论】:

  • 可能忘记更改应用的版本属性?
  • 在以前的版本中我有: android:versionCode="8" android:versionName="1.7" 现在我有 android:versionCode="9" android:versionName="2.0"

标签: android android-activity manifest launcher


【解决方案1】:

参考Things That Cannot Change

它说,

构成兼容性中断的一个微妙但重要的方面是您的活动、服务和接收器组件的 android:name 属性。这可能令人惊讶,因为我们认为 android:name 指向实现我们应用程序的私有代码,但它也是(结合清单包名称)该组件的官方唯一公共名称,由 ComponentName 类表示。

更改应用程序内部的组件名称可能会对您的用户产生负面影响。一些例子是:

  • 如果您的应用程序的主要活动的名称发生更改,用户对其所做的任何快捷方式都将不再起作用。快捷方式是直接指定它应该运行的 ComponentName 的 Intent。
  • 如果实施动态壁纸的服务名称发生更改,则启用动态壁纸的用户在获取新版本应用程序时,其壁纸将恢复为系统默认设置。输入法、辅助功能服务、Honeycomb 的新高级小部件等也是如此。
  • 如果实施设备管理员的接收器的名称发生更改,则与动态壁纸示例一样,更新应用程序时设备管理员将被禁用。这也适用于其他类型的接收器,例如应用小部件。

因此,如果可能,请不要更改清单中声明的​​组件的名称,或使用以下代码删除任何指向该组件的图标。

ComponentName componentToDisable = new ComponentName("application.package.name", "packagename.ActivityClassName");
getPackageManager().setComponentEnabledSetting(componentToDisable, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

还可以使用&lt;intent-filter&gt;...&lt;/intent-filter&gt; 在清单中指定新的启动器活动,以便在用户单击启动器图标时启动您的新活动。

【讨论】:

【解决方案2】:

如果您在手机上以调试模式启动 Activity,是否会正确调用该 Activity。

如果是这样,请检查您是否做了以下事情:

  • 你更改了整个包名
  • 您根本没有签署或签署不正确

您也可以查看http://developer.android.com/guide/publishing/publishing_overview.html

无论如何。如果应用程序在您的调试手机上运行正常,则说明您的发布参数有问题,您应该逐步浏览上述页面。

如果不是,您可以检查路径值,例如活动的包和名称以及过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多