Can two different apps have the same packageName?

use*_*054 8 android packages package

I have this code to get a list of all apps on system:

    PackageManager pm = getPackageManager();

    Intent mainIntent = new Intent(Intent.ACTION_MAIN);

    List<ResolveInfo> installedApps = pm.queryIntentActivities( mainIntent, 0);

    for(ResolveInfo elem : installedApps) {
            String PackageName = elem.activityInfo.applicationInfo.packageName;
            Log.i("TAG",PackageName);
    }
Run Code Online (Sandbox Code Playgroud)

But the result in installedApps shows many repeated PackageNames. Is this possible? It's 'cause a "failure" of the intent or because many apps packageNames have the same name?

Com*_*are 12

这可能吗?

当然.

它导致了意图的"失败"

不,至少不是因为我对"失败"的定义.

或者因为许多应用程序packageNames具有相同的名称?

没有.

这是因为您正在查询活动,而不是应用程序.一个应用程序可以有零个,一个,两个或一百万个活动来响应ACTION_MAIN Intent.


sti*_*ike 6

不,每个应用都应该有一个唯一的包名.如果您安装的应用程序的软件包名称已经在另一个已安装的应用程序中使用,那么它将替换它.

所以应该有其他原因.一个猜测是queryIntentActivities检索可以为给定意图执行的所有活动.因此它可以返回具有相同包名称的活动信息.

您可以尝试使用getInstalledApplications方法.它将返回设备上安装的所有应用程序包的List


Phi*_*hil 5

每个应用程序必须具有唯一的软件包名称。引用API指南:“程序包名称充当应用程序的唯一标识符”和“一旦发布应用程序,您将无法更改程序包名称。程序包名称定义了您的应用程序的标识,因此,如果您进行更改,则它被认为是不同的应用程序,以前版本的用户无法更新到新版本。”

请注意,在单个清单中具有多个ACTION_MAIN条目是完全有效的,因为它们表示应用程序中的替代入口点。有关更多信息,请参见此问题