2010-10-14 11 views
29

La aplicación que estoy desarrollando tiene muchas actividades organizadas en siete paquetes de Java. Originalmente escribí todos los códigos y cosas para cada grupo de actividades en un paquete de Java como diferentes proyectos.Android: incluye múltiples paquetes de Java para Manifest

Ahora estoy en el punto en el que quiero unir todos los paquetes en un solo proyecto. Cuando agrego un nuevo paquete a la carpeta src, aparece un error para todos mis valores R.id. * ("R no se puede resolver").

Mi instinto me dice que hay algo sofisticado que tengo que poner en el manifiesto del proyecto, pero no puedo encontrar ningún recurso en línea para decirme cómo.

. (Nota: He leído y thisthis y todavía no podía encontrar la manera de añadir paquetes adicionales para mi proyecto)

+0

¿Usted intentó hacer una generación limpia?¿Y actualiza la ruta de inclusión para tu archivo R en la clase que agregaste? Si anteriormente tenía la actividad en un proyecto diferente, entonces el archivo R probablemente también estaba en una ubicación diferente. –

+2

He ido al Proyecto> Limpiar ... media docena de veces esperando que funcione ... sin suerte. – HappyGeisha

+0

¿Qué pasa con la ruta de inclusión para R? ¿Es correcto? –

Respuesta

36

Asegúrese de que la declaración de importación en la parte superior de la Actividad hace referencia a la correcta Archivo R Cada proyecto tiene su propio archivo R, por lo que si copia una Actividad de un proyecto a otro, todavía intentará hacer referencia al archivo R del proyecto anterior.

No necesita ninguna inclusión explícita de paquetes diferentes en el manifiesto. Para incluir las actividades de dos paquetes diferentes, dicen:

com.example.package1.Activity1 
com.example.package2.Activity2 

puede hacer lo siguiente:

<manifest package="com.example" . . . > 
    <application . . .> 
    <activity android:name=".package1.Activity1" . . . /> 
    <activity android:name=".package2.Activity2" . . . /> 
    </application> 
</manifest> 
+0

¡Oh Mayra, has sido tan servicial! ¡Gracias de nuevo! – HappyGeisha

+0

Sí, el código funciona, pero Android todavía muestra marcas rojas de error (pero se compilará y ejecutará) – StarWind0

14

Android crea automáticamente la clase denominada "R" en el paquete declarada en el manifiesto de la aplicación. Cuando todas sus clases estén dentro de ese paquete, nunca tendrá que importar explícitamente "R". Sin embargo, si usted tiene clases en otros paquetes, no van a verlo de forma predeterminada y que tendrán que incluir

import <app-package>.R; 

o

import <app-package>.*; 

(sustituyendo el nombre real de <app-package> por supuesto).

Si incluye library projects en su aplicación, entonces pueden hacer referencia a sus propias clases "R", que se generarán dentro de sus paquetes de inicio. Si tiene varias actividades independientes que deben agruparse en una aplicación final, considere seriamente el uso de proyectos de biblioteca en lugar de fusionar cosas manualmente. Podría hacerte la vida mucho más fácil.

+0

He tratado de usar proyectos de biblioteca en el pasado, y no funcionó para mí. Esto se debe a que todas mis actividades se cruzan entre sí y una vez que hice un proyecto como biblioteca, la referencia se volvió direccional. Soy un novato en programación, así que probablemente no tenga ningún sentido, pero gracias por tu ayuda de todos modos :) – HappyGeisha

+0

No, este es un problema común con las bibliotecas: deben ser bastante independientes, lo que limita su utilidad. Pensé que podría ser útil en este caso, ya que dijiste que habías desarrollado cada actividad en forma aislada, y por eso pensé que ya estarían contenidas. Si no te hacen la vida más fácil, no hay un porcentaje para usarlos. – beekeeper

0

Comprobar que el diseño -> archivo main.xml es correcta e incluye el android:id="@+id/whateverIdHasCausedYouTheError"

El archivo R.java a continuación, se actualiza para incluir el id .. y bam, el error debería desaparecer.

1

El problema puede persistir incluso si cambiamos el archivo de manifiesto. para evitarlo debemos agregar import com.example.R; en todas nuestras clases.

ejemplo: MainActivity.class en envase2

pakage com.example.package2.Activity2 
import com.example.R; 

(TestActivity.class en package1)

pakage com.example.package1.Activity1 
import com.example.R; 
Cuestiones relacionadas