¿Pueden dos aplicaciones diferentes tener el mismo nombre de paquete?

Tengo este código para obtener una lista de todas las aplicaciones en el sistema:

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); } 

Pero el resultado en installedApps muestra muchos PackageNames repetidos. es posible? Es porque un "fracaso" de la intención o porque muchas aplicaciones packageNames tienen el mismo nombre?

es posible?

Por supuesto.

Es porque un "fracaso" de la intención

No, al menos no para mi definición de "fracaso".

O porque muchas aplicaciones packageNames tienen el mismo nombre?

No.

Es porque estás consultando para actividades , no para aplicaciones . Una aplicación puede tener cero, uno, dos o un millón de actividades que responderán a una Intent ACTION_MAIN .

No, cada aplicación debe tener un nombre de paquete único. Si instala una aplicación con un nombre de paquete que ya se utiliza en otra aplicación instalada, la reemplazará.

Así que debería haber otras razones. Una conjetura es queryIntentActivities Recupera todas las actividades que se pueden realizar para la intención dada. Así que puede devolver información de las actividades con el mismo nombre del paquete.

Puede intentar usar el método getInstalledApplications . Devolverá una Lista de todos los paquetes de aplicaciones que están instalados en el dispositivo

Cada aplicación debe tener un nombre de paquete uniqe. Para citar la guía de la API : "El nombre del paquete sirve como un identificador único para la aplicación" y "Una vez que publique su aplicación, no podrá cambiar el nombre del paquete. Se considera que es una aplicación diferente y los usuarios de la versión anterior no pueden actualizar a la nueva versión. "

Tenga en cuenta que tener varias entradas ACTION_MAIN en un único manifiesto es perfectamente válida ya que representan puntos de entrada alternativos en la aplicación. Vea esta pregunta para más información.

El nombre del paquete actúa como una estructura de carpetas. Lo puedes ver cuando entras en la carpeta data-> data en el dispositivo o emulador, creo.

¿Necesitamos diferentes carpetas para diferentes aplicaciones?

Yo diría que es mejor que sea así. Ya que no quiero que los archivos de mismo nombre para anular unos a otros y hacer comportamientos inesperados o accidentes. Si está seguro de que ambas aplicaciones no tienen un choque en los nombres de clase o así, creo que llegó a ser lo mismo.

NO,

Precaución: Una vez que publique su aplicación, no podrá cambiar el nombre del paquete. El nombre del paquete define la identidad de la aplicación; por lo tanto, si la cambia, se considera que es una aplicación diferente y los usuarios de la versión anterior no pueden actualizar a la nueva versión.

Documentos

Pero hay diferentes puntos de entrada mediante el uso de filtro de intenciones en diferentes actividades diferentes.

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

NOMBRE DEL PAQUETE: Nombre completo del paquete de estilo Java para la aplicación. El nombre debe ser único. El nombre puede contener letras mayúsculas o minúsculas ('A' a 'Z'), números y subrayados ('_'). Sin embargo, las partes de nombre de paquete individuales sólo pueden comenzar con letras. Para evitar conflictos con otros desarrolladores, debe utilizar la propiedad del dominio de Internet como base para los nombres de los paquetes (al revés). Por ejemplo, las aplicaciones publicadas por Google comienzan con com.google. También debe utilizar nunca el espacio de nombres com.example al publicar sus aplicaciones.

El nombre del paquete sirve como un identificador único para la aplicación. También es el nombre predeterminado para el proceso de aplicación (véase el atributo de proceso de process del elemento <application> ) y la afinidad por defecto de una actividad (véase el atributo taskAffinity del elemento <activity> ).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.