自从Android诞生以来,每个开发者都可以修改自己应用的入口。虽然这是刚需,但有时可能会让你很头痛,特别是如果这个应用能帮你赚钱的话。
更新:文章末尾提供了该问题的解决方案,一定要阅读到最后哦!
原文链接:http://andrzejchm.github.io/android/never_change_your_launcher_activity/
自从Android诞生以来,每个开发者都可以修改自己应用的入口。虽然这是刚需,但有时可能会让你很头痛,特别是如果这个应用能帮你赚钱的话。
想象这样一个场景:一款应用已经在应用市场好几年了,已经积累了很多用户。虽然不是必需的,但是对某些终端用户来说还是有一定价值的,特别是对于开发者本人。大多数的智能手机用户并不是太熟悉系统是如何运转的。桌面上的快捷方式或者小组件对于他们来说是最容易理解的打开应用的方式。想一下,如果桌面上快捷方式的图标消失了会怎么样?当你更改了启动Activity后,这种现象确实会出现的。
在AndroidManifest.xml清单文件里的代码是这样的:
Before
|
|
After
|
|
看下上面代码中的修改,<category android:name=”android.intent.category.LAUNCHER”/> 从MainActivity改为了MainActivity2。当你只修改主Activity的名字时也会出现这种情况。具体表现如下图:
![[修改前修改后] [修改前修改后]](/2017/06/13/译-永远不要改变你的Launcher-Activity/E2297887-5DC8-4584-9239-3FCFFB398F39.png)
由于程序入口的真实路径已经改变,所以大多数Android系统上的第三方桌面程序会从主屏幕上把图标移除。就像PC机桌面上的快捷方式一样,如果你改了*.exe的名称,那么该快捷方式将变为无效的快捷方式,而且也不会打开可执行程序。
如果应用的图标是放在首页的文件夹里又会是什么样呢?
![[分组后] [分组后]](/2017/06/13/译-永远不要改变你的Launcher-Activity/B30F4869-F205-4430-BF04-B385937F9B42.png)
是的,发生这种现象的唯一的原因就是改变了应用的入口。
但是等下,你刚说了快捷方式会消失的,那用户又是怎么看到那条消息的呢?
问得好!大多数Launcher程序的一个比较好的功能就是能把app分组后放到文件夹里。莫名其妙的是,当把App放到文件夹后,即使更改了android.intent.category.LAUNCHER intent-filter标签,图标依然在分组里,但是当你想打开程序的时候,那条消息就会出现。
注意:上面描述的现象并不是100%能复现,要看你用的launcher,大多数应用市场上热门的Launcher都会更新快捷方式以合理解决问题。
谁又会在意呢!用户会从用户列表里把图标拖回主屏幕的!
是有可能!但是你要为这种可能性付出金钱的代价。对于很多用户来说,没有你的App不会有什么影响,而且一个没有主屏幕快捷方式的App等同于完全没有安装。记住为了积累用户,你已经花了很多钱去做市场推广。
最近我有机会亲自去体会这个问题,在更改Launcher Activity之前和之后,APP的流量是这样的:
![[流量对比] [流量对比]](/2017/06/13/译-永远不要改变你的Launcher-Activity/11690263-9BC5-494B-A64C-410A440256C1.png)
更新:解决方案!
多亏了这篇文章,你仍然可以修改Launcher Activity,并且保留主屏幕上原先的快捷方式。方法就是使用
这就像是URL重定向一样可以完美兼容,原理就是它会将原先的Launcher Activity重定向到新的,然后你才可以使用主屏幕上原先的快捷方式来运行程序。所以现在你想改Launcher Activity的话,可以这样做:
|
|
注意下,原先的MainActivity如今变成了一个指向MainActivity2的别名,从而才能保留主屏幕上的快捷方式,
并且把MainActivity2作为程序新的入口。这样做的一个好处就是.MainActivity已经没有必要出现在你的工程里了,
因为alias会跟你指定的Activity一起生效,即使已经不存在。