2012-08-26 9 views
8

Duplicar posible:
What's the “dot” for when registering an ActivityPunto principal en Android: ¿el nombre realmente es obligatorio?

En todos los ejemplos de nombres Android actividades, servicios, etc. todos empiezan por un punto:

<activity android:name=".MyActivity" /> 

olvidé de hacer esto en todos los proyectos de Android, pero funcionan perfectamente.

Mi pregunta: ¿Este punto inicial es realmente necesario?

EDIT: Aquí hay un pequeño ejemplo de instantánea de una de mis aplicaciones. Esta aplicación funciona perfecto. No utiliza nombres calificados y no usa puntos:

<activity 
     android:exported="false" 
    android:name="Tankvorgaenge" > 

    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity> 

<activity android:name="Tankvorgangdetails" /> 
<activity android:name="Tankvorgangdetailsbearbeiten" /> 
<activity android:name="TankvorgangUebersicht" /> 
<activity android:name="Verbrauch" /> 

<service android:name="MyService" /> 
+0

Me di cuenta de que con el ADT/SDK anterior no tiene un punto, pero los más nuevos lo hacen automáticamente ... por lo que he visto. – EGHDK

+0

Por experiencia dolorosa, siempre uso dot, no el nombre de clase completo. Esto es después de que tuve bloqueos en una aplicación en algunos teléfonos con ciertos niveles de API y no solo relacionados con API, 2 HTC Desire, ambos 2.3. Uno se estrelló, ¡uno no! Nunca he encontrado una razón para eso. – Simon

Respuesta

19

Omitiendo el punto y que no se beneficie plenamente el nombre del paquete/clase funcionará si y sólo si la clase especificada no es parte de un subpaquete dentro de su aplicación.

Si el nombre del paquete de aplicaciones es com.example.myapp, y tiene una clase de actividad com.example.myapp.MyActivity:

  1. android:name="MyActivity" va a funcionar.
  2. android:name=".MyActivity" funcionará.
  3. android:name="com.example.myapp.MyActivity" funcionará.

Pero si tiene el mismo paquete de aplicación y una clase de actividad en un subpaquete dentro de su árbol de código fuente como com.example.myapp.myactivities.MyActivity, las cosas cambian.

  1. android:name=".myactivities.MyActivity" trabajará
  2. android:name="com.example.myapp.myactivities.MyActivity" funcionará
  3. android:name="MyActivity"no funcionará
  4. android:name="myactivities.MyActivity"no funcionará

3 no funciona porque eso va a inferir que la nombre de clase que quieres decir es en realidad com.example.myapp.MyActivity como en el primer ejemplo anterior. No se encontrará una clase con este nombre y obtendrá un error.

4 no funciona porque se ve como un nombre de clase completo, es decir el sistema lo interpretará en el sentido de que myactivities.MyActivity es el nombre completo en sí, no el nombre real de com.example.myapp.myactivities.MyActivity.

Se necesita el punto inicial para aclarar que está utilizando una ruta relativa, no una ruta absoluta. Si especifica solo un nombre de clase sin ninguna información de paquete, el sistema infiere que la clase está en la raíz de la jerarquía de su paquete de aplicación.

0

Es obligatorio. Es una abreviatura para el nombre del paquete. android: se supone que el nombre especifica el nombre completo de la clase. Al poner un punto inicial, podemos indicar que el siguiente nombre de clase se encuentra dentro del "paquete" declarado anteriormente en el manifiesto.

+0

¿Por qué funcionan todas mis aplicaciones? En ninguna de mis aplicaciones utilizo nombres totalmente calificados y no uso el punto. –

2

El punto es utilizar la ruta relativa a la aplicación da package_name. Puede reemplazar .MyActivity con com.yourActivityPackage.MyActivity

+0

¿Por qué funcionan todas mis aplicaciones? En ninguna de mis aplicaciones utilizo nombres totalmente calificados y no uso el punto. –

1

Sí, el activity[android:name] debe especificar un completo package.Class, o si comienza con un punto, entonces se adjunta al paquete de la application 's.

Véase el doc

+0

¿Por qué funcionan todas mis aplicaciones? En ninguna de mis aplicaciones utilizo nombres totalmente calificados y no uso el punto. –

Cuestiones relacionadas