应用程序未安装错误,当从主屏幕快捷方式启动时。

15

注意:我已经浏览了以下链接:

'App not Installed' Error on Android 当我尝试自动更新时出现“应用程序未安装”

我的问题有点不同。

  • 我在版本1.0中将默认/主要活动设置为XActivity.java发布了应用程序
  • 我发布了更新,将默认/主要活动更改为YActivity.java
  • 我发现从应用程序菜单打开应用程序很好,但是当我尝试从主屏幕快捷方式启动时,它会抛出一个错误,显示“应用程序未安装

我知道这是由于快捷方式引用旧的XActivity.java,删除就可以解决此问题,但如果我将应用程序作为更新发布给数千名已安装该应用程序的用户,他们在第一次看到此错误消息时会感到烦恼。 我会失去得到的好评


尝试移除图标并创建一个新的快捷方式。 - Ken Wolf
11个回答

28
请检查您的活动是否具有android:exported="false"属性,如果应该是"android.intent.category.LAUNCHER",则会禁用指定活动在启动器上启动。

4
Android 12要求活动在显式设置此值。我最初将其设置为false,但由于您的回答而更改了它。谢谢! - Yirmi
没有,文档是将其应用于服务上的。只需区分哪些是启动器活动,哪些是服务,就可以知道在哪里应用导出属性。 - Pier Betos
我在上面链接了Android 12(API 31)的文档更改。如果您的应用程序针对Android 12并包含使用意图过滤器的活动、服务或广播接收器,则必须显式声明这些应用程序组件的android:exported属性。 - Yirmi
我仔细查看了一下,它指定使用意图过滤器的活动需要该属性。由于主/启动器活动使用了意图过滤器,因此需要该属性。 - Yirmi
android:exported="true" <= 这个解决了我的问题。 - Hassan Naqvi
这应该是被接受的答案,非常简单!感谢@PierBetos! - head in the codes

13

在2021年,只需要添加

android:exported="true"
在清单中,它将被修复。

示例


4

这是因为在某些启动器中,主屏幕快捷方式与启动器图标的功能稍有不同。

你旧的快捷方式仍然包含对XActiivity的引用作为主Activity,而你已经更新为YActiivity。 这会导致Android认为该应用程序未安装,因为它无法找到标记为MAIN Activity的XActiivity。

只需将主屏幕图标删除并重新添加即可解决此问题。


谢谢,我同意 / 知道你的解决方案,但是如果我将我的更新发布给数千人,它将影响每个人,所以他们可能会遇到相同的问题。 - Shri
很遗憾,除了不更改启动器类的名称外,您几乎无法避免这种问题。有些启动器甚至没有这个问题,但有相当一部分存在这个问题。这只是您无法控制的事情之一。 - Raghav Sood
有人能够确认哪些启动器存在这个问题吗?我想要复现一下。 - AlexVPerl
哦,我一直在想一个 Android 的问题,结果只是活动名称更新了,原来只是个愚蠢的打字错误 ;) - Choletski

3
放置
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    </intent-filter>

在 Manifest.XML 文件中特定的活动部分对我起到了作用。


这与此问题无关。文档表示,快捷方式的活动必须是LAUNCHER和action MAIN。(文档 https://developer.android.com/guide/topics/ui/shortcuts) - TheLibrarian

2

这个问题虽然有点老,但今天仍然很重要。

这是因为我更改了启动活动。最初的回答如下(已截断):

<manifest>
    <application>
        <activity android:name=".activities.StartActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.OtherActivity"
            android:exported="false" />
    </application>
</manifest>

我移除了StartActivity但是忘记移除android:exported="false",在添加了Intent Filter之后。代码看起来像这样:

最初的回答:

<manifest>
    <application>
        <activity
            android:name=".activities.OtherActivity"
            android:exported="false"> <!-- REMOVE THIS -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

简而言之,确保您的起始活动是已导出的。
最初的回答:

简单来说,请确保您的启动活动是被允许外部调用的。


0

我刚刚遇到了同样的问题。

我不是专家,所以我从所有答案中得到的信息就是问题出在启动器创建的主屏幕快捷方式上。

我使用的是经典极简启动器,它没有应用程序抽屉,因此所有应用程序都在主屏幕上,所以我不能仅删除快捷方式而不卸载它。

因此,我清除了我的启动器缓存,它自己创建了该应用程序的新快捷方式,并开始正常工作。


0

“应用程序未安装”错误的可能解决方案

  • 重新启动手机:在这种情况下,首先要做的是重新启动您的设备。或者只需关闭,取出电池并重新插入。
  • 确保卸载任何不需要的应用以释放空间,同时卸载当前已安装在设备上
    的同一应用的旧版本。
  • 仔细检查下载的apk文件,并确保它们已被完全复制或下载。

  • 尝试通过转到“设置”>“应用程序”>“全部”>“菜单键”来重置应用权限。

    重置应用程序权限或重置应用程序偏好设置。

  • 将应用程序安装位置更改为“自动”或“让系统决定”。
    确保您的SD卡未挂载或连接到PC或其他位置。
  • 对于最坏的情况,格式化您的SD卡 - 将其内容复制到其他地方进行备份并格式化。

  • 最后的解决方法是彻底擦除您的设备。可以通过在设置中进行出厂设置或在
    恢复模式下进行完全擦除来完成。

参考资料


0

首先确保当前安装的应用程序可以移动到SD卡,如果不能移动,则您已经找到了原因。在我的HTC Desire 300上进行root时,我刷了错误的ROM,导致手机陷入启动循环中,后来我去修理店修好了。现在运行自定义ROM,但我不知道是哪一个,它不支持将应用程序移动到SD卡,所以我将应用程序复制到手机存储器中,卸载或移除SD卡,然后尝试从手机存储器中安装,现在我的FS2014 1.35已经安装成功了,希望这对您有所帮助。这只适用于自定义ROM,因为原始ROM没有这样的错误,或者您称之为bug。


是的,但这仅适用于应用程序包安装期间未安装应用程序的情况。 - arshdeep

0

可能是这种情况,请检查您的代码中的“应用程序快捷方式创建”,其中Intent.EXTRA_SHORTCUT_INTENT被映射到LAUNCHER活动。(可能是SplashScreenActivity)


0

如果您在应用程序中同时实现XActivity和YActivity作为入口点,会发生什么? XActivity可以删除其启动器快捷方式,安装YActivity快捷方式并启动YActivity。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接