Un noob con Android

Peinacabras

Buenas, estoy lo que se dice empezando con android y todas las historias, y bueno, tengo algun que otro problemilla de conceptos sobre todo

He terminado un sencillo Hello World! para movil con un boton y poco mas total , tras meterlo en el emulador y toda la historia me tira el siguiente mensaje

[2012-12-21 21:29:19 - HelloWorld] adb is running normally.
[2012-12-21 21:29:19 - HelloWorld] No Launcher activity found!
[2012-12-21 21:29:19 - HelloWorld] The launch will only sync the application package on the device!
[2012-12-21 21:29:19 - HelloWorld] Performing sync
[2012-12-21 21:29:19 - HelloWorld] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'AVD_for_3_2in_HVGA_slider_ADP1'
[2012-12-21 21:29:19 - HelloWorld] Uploading HelloWorld.apk onto device 'emulator-5554'
[2012-12-21 21:29:22 - HelloWorld] Installing HelloWorld.apk...
[2012-12-21 21:29:28 - HelloWorld] Success!
[2012-12-21 21:29:28 - HelloWorld] HelloWorldbinHelloWorld.apk installed on device
[2012-12-21 21:29:28 - HelloWorld] Done!

Bien, me voy al AVD y me encuentro con el package pero no se desde donde puedo ver la aplicación funcionando , ¿Alguien sabe donde puedo localizarla? Un saludo.

Puni

[2012-12-21 21:29:19 - HelloWorld] No Launcher activity found!

Las activitys no se lanzan si no hay un "intent" que se lo indique. En este caso te falta indicar que activity será tu actividad principal a iniciarse cuando le llegue el "intent" de launch. Debes indicar que tu actividad responderá al "intent" de iniciarse vaya.

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Si una actividad no tienen ningún filtro para intents de lanzamiento quiere decir que no la puedes iniciar de forma explicita, es decir, no te va a aparecer en la lista de apps a lanzar. Normalmente dentro de tu aplicación creas intents y los lanzas indicando que actividad debe iniciarse. A veces también tiene sentido tener apps que solo responden a ciertos intents, sin que puedas arrancarlas de forma explicita.

Cuando tienes varias apps que responden a los mismos intents es lo tipico de android que te pregunta "Con que app quieres realizar esta acción?"

1 2 respuestas
Peinacabras

#2 Buenas, antes de nada, tengo el siguiente codigo

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Mi primera aplicacion en Android" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="CLICK Y TE DA CANSER NOMAS" /> </LinearLayout>

AL añadir tu código me tira un error :
"Description Resource Path Location Type
error: Error: No resource found that matches the given name (at 'label' with value '@string/HelloWorld'). main.xml /HelloWorld/res/layout line 18 Android AAPT Problem"

1 respuesta
ceeps

#3 Creo recordar que lo de #2 se pone en el AndroidManifest.xml

1 respuesta
Peinacabras

#4 Peta igualmente lo ponga donde lo ponga =/

1 respuesta
babri

#5 cuando le das al botón te lleva a otra activity donde pone el hello world???? o en la misma?

1 respuesta
Peinacabras

Por cierto he leido que deberia de añadir al main

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />

Pero sigue en las mismas tirando errores

Description Resource Path Location Type
error: Error: No resource found that matches the given name (at 'text' with value '@string/hello'). main.xml /HelloWorld/res/layout line 7 Android AAPT Problem

Peinacabras

#6 No es que le de ni al botón, no me deja ni compilar ahora mismo.

1 respuesta
babri

#8 voy a reproducir tu programa a ver cual puede ser el error :P

1
m0rG

Asegúrate de que has definido las strings que utilizas en el layout en /res/values/strings.xml. Los errores básicamente dicen que no existen los recursos (strings) con nombre "HelloWorld" y "hello" (tu último post). Es decir en tu fichero de strings /res/values/strings.xml debería haber dos líneas tal que:

<string name="hello">Hello!</string>
<string name="HelloWorld">Hello World</string>

+Info y ejemplos: http://developer.android.com/guide/topics/resources/string-resource.html

Ante errores extraños también puedes probar a hacer limpieza del proyecto (Project>Clean) ya que Eclipse a veces se pinza un poco.

1
MTX_Anubis

Lo que deberías hacer es leer los errores que te da que son bien simples:

error: Error: No resource found that matches the given name (at 'text' with value '@string/hello'. main.xml	/HelloWorld/res/layout	line 7

Pues eso, que no tienes el string "hello" definido en ningún sitio y lo estás utilizando en main.xml, en concreto en la linea 7.

Deberías mirarte como va todo el tema de los resources en general.

Peinacabras

Vale, añadí las 2 string y me deja compilar y se me instala correctamente, pero vuelvo al problema inicial.

No puedo acceder a la aplicación desde los paquetes y no se donde añadir el

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Aqui una screen

Gracias a todos por la ayuda prestada hasta ahora.

1 respuesta
Puni

#12 En el androidmanifest.xml tienes que definir todas las activitys, services y demás componentes que usas en la aplicación, así como los permisos que necesitas (uso de gps, internet etc).

Viendo tu IDE y como la carpeta SRC está vacía el problema es que no tienes ninguna actividad que lanzar siquiera.

Tu has definido un layout que es el main.xml. Ahora necesitas una activity que lo cargue. Tendras que hacer click derecho en src y hacer un nuevo activity, que se llame como quieras, y dile a eclipse que será tu activity principal, así en el manifest probablemente ya te ponga ese código automáticamente.
Luego en el onCreate del activity solo tendrás que llamar setContentView(R.layout.main)

1 respuesta
MTX_Anubis

Ya te lo han dicho antes, en el AndroidManifest.

Ahí tienen que ir declaradas todas tus actividades entre otras cosas y mediante flags, indicar a que intents responden.

En este caso, cuando se instala una aplicación, es necesario que una de sus actividades tenga lo que te han comentado si quieres que aparezca en el listado de aplicacionesí. De hecho una sola aplicacion puede aparecer varias veces en el listado dependiendo de los intent filter que tengan configurados en el manifest.

http://developer.android.com/guide/topics/manifest/manifest-intro.html

Para más info del manifest.

Pero vamos, si quieres uno de prueba, al crear el proyecto en eclipse, te pregunta si quieres crear la activity hello world, con darle a que si debería create todo eso.

edit: Cierto, leyendo a #13 ni me había fijando en el proyecto de tu screen. Te recomiendo que busques algún tutorial que te enseñen desde el inicio.

Peinacabras

Bueno, ya he leído bastante y tras leerlo todo de nuevo información y tal he borrado todo y lo creado de 0 al final me sale todo genial, no obstante, en layout no tengo un main.xml, tengo un activity_nombre.xml que es donde he implementado el código.

Implica algún problema el nombre? Tiene que tener alguna nomenclatura o así mismo va que arde? Muchas gracias a todos por contestar D;

Puni

Los layouts pueden tener el nombre que quieras, el IDE se encarga de generar unos IDs únicos para practicamente cada recurso que tienes en la carpeta /res/. Así por ejemplo para cargar el layout ese harías un setContentView(R.layout.activity_nombre) y si quisieras hacer referencia a alguna imagen que tuvieras en drawable harías referencia a R.drawable.imagen.

1

Usuarios habituales

  • Puni
  • Peinacabras
  • MTX_Anubis
  • m0rG
  • babri
  • ceeps