2010-08-31 9 views
30

¿Es necesario iniciar el nombre de la actividad con el punto ('.') En el archivo de manifiesto? por ejemplo, actividad ContactManager comienza con '.'¿Se requiere el nombre de la actividad en AndroidManifest.xml para comenzar con un punto?

<activity android:name=".ContactManager" android:label="@string/app_name"> 

en tanto que la actividad es sin ContactAdder punto

<activity android:name="ContactAdder" android:label="@string/addContactTitle"> 

en el archivo de manifiesto de la muestra ContactManager http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html

ACTUALIZACIÓN: Si el nombre de la actividad comienza con. se agrega al nombre del paquete para que se convierta en un nombre totalmente calificado, pero ¿qué ocurre si no comienza con '.'

+0

Posible duplicado de [¿Cuál es el "punto" para registrar una actividad] (http://stackoverflow.com/questions/4834122/whats-the-dot-for-when-registering-an-activity) –

Respuesta

15

Desde el Android Dev Guide < activity > reference:

El nombre de la clase que implementa la actividad , una subclase de actividad. El valor del atributo debe ser un nombre de clase totalmente calificado (como, "com.example.project.ExtracurricularActivity"). Sin embargo, como una abreviatura, si el primer carácter del nombre es un período (para ejemplo, ".ExcurricularActivity"), se agrega al nombre del paquete especificado en el elemento. No hay un valor predeterminado. El nombre debe ser especificado.

3

Recientemente he entendido el concepto de paquete de aplicación en Android y la respuesta a esta pregunta, pensé que debería compartirlo.

Si el paquete de la aplicación (especificado en el manifiesto) es el mismo que el paquete java en el que está presente la Actividad, entonces no es necesario especificar el nombre completo del paquete en el manifiesto para las actividades. Si el nombre del paquete de la aplicación es diferente del nombre del paquete de Java, entonces el nombre de la actividad debe completarse con el nombre del paquete.

Esta publicación del blog proporciona información sobre el paquete de la aplicación y los paquetes de Java en Android.

http://blog.javia.org/android-package-name/comment-page-1/#comment-14063

33

me picó la curiosidad también, y se fue en busca de ella en el código fuente de Android.

Encontré lo que parece ser el código relevante en el repositorio platform/frameworks/base, en el archivo tools/aapt/Resource.cpp. La función relevante es fullyQualifyClassName, llamada por massageManifest.

La regla se aplica se explica en un bloque de comentario dentro de la función fullyQualifyClassName:

// asdf  --> package.asdf 
// .asdf .a.b --> package.asdf package.a.b 
// asdf.adsf --> asdf.asdf 

Al explicar esta regla, tenemos:

  1. Si el nombre comienza con un punto, siempre como prefijo con el paquete
  2. Si el nombre tiene un punto en cualquier otro lugar, no lo prefija.
  3. Si el nombre no tiene punto en absoluto, también prefijo con el paquete.

Por lo tanto, para responder a su pregunta: siempre que no haya un punto en otro lugar, las dos formas de escribir el nombre de la actividad deben tener el mismo efecto.


Como extra, la función massageManifest muestra donde se aplica esta regla:

  • En el elemento application, en los name y backupAgent atributos.
  • En el activity, service, receiver, provider, y activity-alias elementos, en el atributo name.
  • En el elemento activity-alias, en el atributo targetActivity.
Cuestiones relacionadas