Diferencia entre revisiones de «PDM UD1 CoñecendoAndroidStudio»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 46: Línea 46:
 
===/app/res===
 
===/app/res===
  
−
'''Cartafol /app/res''' (Resources/Recursos): almacena todos os ficheiros de recursos necesarios para a aplicación: imaxes, vídeos, ficheiros xml, animacións, ficheiros para a internacionalización, etc.   
+
* '''Cartafol /app/res''' (Resources/Recursos): almacena todos os ficheiros de recursos necesarios para a aplicación: imaxes, vídeos, ficheiros xml, animacións, ficheiros para a internacionalización, etc.   
 +
 
 +
* <u>'''Importante:'''</u> Todo o que se atopa dentro do cartafol /res/ ten que ter letras minúsculas e só poden conter letras, número e _ .Se se pon outro carácter o proxecto dará un erro de compilación.
 +
 
  
  
Línea 69: Línea 72:
 
<u>Nota:</u> Todos son arquivos de configuración son XML que poden ser editados. Máis información [https://developer.android.com/guide/topics/resources/providing-resources.html neste enlace].
 
<u>Nota:</u> Todos son arquivos de configuración son XML que poden ser editados. Máis información [https://developer.android.com/guide/topics/resources/providing-resources.html neste enlace].
  
−
===/gen===
 
−
O cartafol '''/gen''' contén codigo Java creado automaticamente ao compilar a aplicación. O ficheiro máis importante é '''R.java'''.
 
−
<gallery caption="/res" widths="350" heights="300px" perrow="2">
 
−
Image:Android_2013_U2_01_OlaMundo_21.jpg| O ficheiro '''R.java''' define a clase R que serve de enlace entre os recursos creados en /res e o código Java da aplicación. Para iso, a clase R contén constantes cos '''IDs''' dos recursos de '''/res'''. Este ficheiro é xerado cada vez que se compila co cal se modifica manualmente perderanse os cambios na próxima compilación.
 
−
Image:Android_2013_U2_01_OlaMundo_22.jpg| Por exemplo, podemos ver que para o layout definido en /res, nun ficheiro xml, existe unha constante que nos permite acceder dende Java ao layout a través desa constante como se pode ver ...
 
−
Image:Android_2013_U2_01_OlaMundo_20.jpg| ... no código fonte asociado á Actividade que lanza a aplicación.
 
−
</gallery>
 
  
 
===/assets===
 
===/assets===
−
*Contén o resto de ficheiros que se precisen para a aplicación: ficheiros de configuración, de datos, etc. Para acceder a estes recursos non se fai a a través da clase R senón que a través da súa ruta no sistema
 
−
[[Image:Android_2013_U2_01_OlaMundo_25.jpg]]
 
  
 +
* Contén o resto de ficheiros que se precisen para a aplicación: ficheiros de configuración, de datos, bases de datos,etc... Para acceder a estes recursos non se fai a a través da clase R senón que se fai a través da súa ruta no sistema.
  
−
===/bin===
+
* No Android Studio o cartafol 'assets' non se atopa creado por defecto. Para crealo temos que ir ao módulo /app/ e premendo o botón dereito escoller a opción New => Folder => Assets Folder como se va na seguinte imaxe:
−
*Unha vez que se compila a aplicación xerase o '''apk''' da aplicación para poder ser instalada nun dispositivo.
 
  
−
<gallery caption="/bin" widths="350" heights="300px" perrow="2">
+
[[Imagen:PDM_UD1_Estrutura_4.jpg|center|400px]]
  
−
Image:Android_2013_U2_01_OlaMundo_26.jpg| Antes de compilar non hai '''apk'''.
 
−
Image:Android_2013_U2_01_OlaMundo_27.jpg| Compilamos, lanzando a aplicación como unha Aplicación Android.
 
−
Image:Android_2013_U2_01_OlaMundo_28.jpg| Lanzando a aplicación
 
−
Image:Android_2013_U2_01_OlaMundo_29.jpg| O ficheiro '''apk''' que permite instalar a aplicación nun dispositivo e que Eclipse o fai por nós.
 
−
</gallery>
 
  
 
===Ficheiro AndroidManifest.xml===
 
===Ficheiro AndroidManifest.xml===
−
*Contén a definición das características máis importantes da aplicación: nome, versión, icono, activities, servizos, instrumentación, permisos de acceso aos recursos, etc.
 
  
−
<gallery caption="AndroidManifest.xml" widths="350" heights="300px" perrow="2">
+
*Contén a definición das características máis importantes da aplicación: nome, versión, icona, activities, servizos, instrumentación, permisos de acceso aos recursos, etc.
−
Image:Android_2013_U2_01_OlaMundo_39.jpg| Facemos dobre click nel e vemos a lapela '''Manifest'''
+
 
−
Image:Android_2013_U2_01_OlaMundo_41.jpg| Maximizámola ...
+
[[Imagen:PDM_UD1_Estrutura_5.jpg|center|400px]]
−
Image:Android_2013_U2_01_OlaMundo_42.jpg| Vemos os SDK mínimo e obxectivo. Se o desexamos agora podemos cambiar eses valores. '''Edición 2015''': lembrar que o SDK mínimo é o 16.
+
 
−
Image:Android_2013_U2_01_OlaMundo_43.jpg| Na lapela '''Application''' indicamos o tema, o nome da aplicación e a icona a usar. Observar que son referencias a outros recursos (@.../...). Poderíamos ir aos ficheiros ou cartafoles correspondentes de /res e mirar cal vai ser o seu valor.
+
* Na imaxe se pode ver entre outros datos:
−
Image:Android_2013_U2_01_OlaMundo_44.jpg| Non hai ningún permiso definido por defecto.
+
:* Nome da icona a cargar (fai referencia a unha icona que se atopa en /app/res/mipmaps/
−
Image:Android_2013_U2_01_OlaMundo_45.jpg| Esta aplicación tampouco ten definida ningunha instrumentación do dispositivo para ser usada por ela.
+
:* Nome da aplicación que está definido nunha constante no arquivo /res/values/strings.xml. Ven ser o nome que aparece asociado a icona da aplicación.
−
Image:Android_2013_U2_01_OlaMundo_46.jpg| Todo o anterior, pero en formato xml editable.
+
:* O aspecto que vai ter a aplicación (ven ser coma un arquivo CSS de HTML). Se atopa no arquivo /res/values/styles.xml.
−
Image:Android_2013_U2_01_OlaMundo_47.jpg| Podemos ver os SDKs mínimo e obxectivo ('''Edición 2015:''' lembrar SDK mínimo, como mínimo o 16), a icona que se vai usar para a aplicación, (foi o que escollemos cando a creamos, está accesible a través dunha referencia a un recurso), o nome da aplicación e o tema a usar. Revisar o ficheiro strings.xml de /res/values. Finalmente está a lista de activities que ten a aplicación, neste caso unha soa, a principal.
+
:* As activities que conforman o proxecto. Inicialmente so temos unha.
 +
 
 +
 
 +
===Identificar o minSDK, targetSDK e buildSDK===
 +
 
 +
* Anteriormente en Eclipse, dentro do arquivo AndroidManifest.xml tamén ían as liñas que indicaban o '''targetSDK''' e '''minSDK'''.
 +
: Estes conceptos (polo menos un deles) o vimos no proceso de [http://wiki.cifprodolfoucha.es/index.php?title=PDM_UD1_Co%C3%B1ecendoAndroidStudio#Crear_un_proxecto_Android:_OlaMundo creación do proxecto Ola Mundo]. Se vos fixaches no paso un, indicabamos o minSDK no que ía funcionar a nosa aplicación.
 +
: Lembrar que o '''minSDK''' indica a versión de Android máis pequena no que o noso proxecto funcionaría. Isto o facemos para poder utilizar funcións e avances das versións seguintes do S.O. Android que non estaban dispoñibles en versións anteriores.
 +
: Por outra banda o '''targetSDK''' indica a versión de Android no que o programador testou a aplicación.
 +
: Existe outro parámetro que ven ser o '''buildSDK''' que indica a versión de Android co que foi compilado o proxecto.
 +
 
 +
<gallery caption="MinSDK, targetSDK e buildSDK" widths="350" heights="300px" perrow="2">
 +
Image:PDM_UD1_Estrutura_7.jpg| Primeiro debemos acceder á estrutura do proxecto.
 +
Image:PDM_UD1_Estrutura_8.jpg| Seleccionamos o '''módulo App''' e na lapela 'Properties' podemos ver o buildSDK (sería o '''compileSDK''').
 +
Image:PDM_UD1_Estrutura_9.jpg| Seleccionamos a lapela 'Flavors' e podemos ver o '''minSDK''' e o '''targetSDK'''.
 
</gallery>
 
</gallery>
 +
 +
 +
 +
==Cambiando o tipo de vista no Android Studio==
 +
 +
* En Android Studio podemos cambiar como visualizamos o proxecto da Aplicación.
 +
* Inicialmente estamos na vista Android, pero podemos cambiar a calquera outra premendo no combo indicado na seguinte imaxe:
 +
 +
[[Imagen:PDM_UD1_Estrutura_6.jpg|center|400px]]
 +
 +
 +
Por exemplo, dentro da vista '''Proyect''' podemos ter acceso a outros cartafoles interesantes:
 +
 +
===/generated===
 +
 +
* O cartafol '''/generetad''' contén codigo Java creado automaticamente ao compilar a aplicación. O ficheiro máis importante é '''R.java'''.
 +
 +
[[Imagen::PDM_UD1_Estrutura_10.jpg|center|400px]]
 +
 +
* Esta clase é compilada cada vez que modificamos algo no cartafol /app/res. O que fai e asinar a cada recurso que se atopa en /res/ un identificador. Desa forma imos poder referencialos na programación polo seu nome.
 +
 +
* Neste exemplo se pode ver como dálle un id ao layout e na clase R xera automaticamente unha entrada para ese id asinándolle un número.
 +
 +
[[Imagen::PDM_UD1_Estrutura_11.jpg|center|400px]]
 +
[[Imagen::PDM_UD1_Estrutura_12.jpg|center|400px]]
 +
 +
 +
===/ouputs===
 +
 +
* Unha vez que se compila e se constrúe (build) a aplicación xérase o '''apk''' da aplicación para poder ser instalada nun dispositivo. O apk ven ser un exe dun computador con sistema operativo Windows.
 +
 +
[[Imagen::PDM_UD1_Estrutura_13.jpg|center|400px]]
 +
 +
 +
* Para poder xerar o apk hai que, ou ven executar o proxecto para que xere o apk e o instale nun dispositivo ou simplemente xerar o apk:
 +
 +
[[Imagen::PDM_UD1_Estrutura_14.jpg|center|400px]]
 +
 +
 +
 +
* Por defecto xera unha versión da aplicación para 'probas', ou en modo 'depuración'. Xa veremos máis adiante como facer que xere un apk para distribuír, na [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Empaquetado_e_distribuci%C3%B3n sección de Empaquetado e distribución].
 +
  
 
*Referencias:
 
*Referencias:

Revisión del 20:11 14 ago 2016

Introdución

  • Neste apartado vanse describir os cartafoles e ficheiros máis esenciais dos que se compón un proxecto Android.
  • Comezaremos creando un proxecto: OlaMundo, e estudaremos as partes nas que se divide.
  • Os proxectos vanse nomear e numerar da seguinte forma: U2_XX_NomeDaAplicación, para facilitar o seguimento. Sendo U2 a unidade 2 e XX o número de proxecto dentro da Unidade.
  • Estes van estar no seguinte cartafol /ProxectosStudio/PlategaAndroid/Unidade2/<proxectos>


Crear un proxecto Android: OlaMundo

  • Imos crear un proxecto de Android que nos vai servir de 'base' para facer a unidade 2.


Ficheiros do proxecto Android

A continuación imos ver os contidos dos distintos cartafoles que compoñen un proxecto.

/app/

  • É o nome do módulo da aplicación.
  • Un módulo ven ser un conxunto de arquivos dunha aplicación (activities, layouts,...) e arquivos de configuración do Android Studio e da aplicación.
  • Un módulo pode depender doutro para a súa execución ou poden ser totalmente independentes.
  • Por defecto, cando creamos un proxecto AndroidStudio, crea un módulo de nome 'app'.

Máis información neste enlace.

/app/java

Nota: Ven ser no que en Eclipse era /src/. Veremos mais adiante que podemos cambiar a 'vista' de como se visualiza o proxecto e volver a ter o cartafol /src/.

/app/res

  • Cartafol /app/res (Resources/Recursos): almacena todos os ficheiros de recursos necesarios para a aplicación: imaxes, vídeos, ficheiros xml, animacións, ficheiros para a internacionalización, etc.
  • Importante: Todo o que se atopa dentro do cartafol /res/ ten que ter letras minúsculas e só poden conter letras, número e _ .Se se pon outro carácter o proxecto dará un erro de compilación.


PDM UD1 Estrutura 3.jpg


  • /app/res/drawble: Almacena as imaxes da aplicación en función da densidade (dpi) do dispositivo de destino. En Android veremos que podemos ter diferentes resolucións de imaxes para que a aplicación se vexa correctamente en dispositivos de tamaños e resolucións diferentes. Estas imaxes gardaríanse dentro dun cartafol de nome 'drawble-sufixo' no que o sufixo indicará con que código a que tipo de dispositivo debe cargarse as imaxes que estean dentro do cartafol. Por exemplo, o cartafol '/res/drawable-large' tería imaxes que se cargaría con dispositivo de entre 4 e 7 polgadas aproximadamente (observar imaxe).
  • /app/res/layout: Almacena os ficheiros xml onde se definen os elementos gráficos e a súa disposisición, das distintas pantallas que compoñen a aplicación. Igual que no caso anterior tamén imos poder ter diferentes sufixos para cargar layouts en función dos dispositivos. Así, por exemplo, se creamos o cartafol /app/res/layout-land cargaríamos os layouts que estean dentro deste cartafol cando teñamos o dispositivo en posición 'apaisada', é dicir, tumbado.
  • /app/res/mipmap: Almacena a icona que vai representar a aplicación cando estea instalada nun dispositivo. Ven ser a icona de lanzamento. Pódese ver na imaxe que indica que hai 5 iconas. Isto é así xa que crea unha por cada tipo de densidade. A densidade a veremos máis adiante pero ven ser o número de puntos por pulgada que ten o dispositivo. Fisicamente temos un cartafol por cada unha das densidades e dentro de cada cartafol temos o arquivo a cargar, o que pasa que AndroidStudio oculta os cartafoles. Tam
  • /app/res/values: Almacena constantes que definen: cadeas de texto, estilos, cores, dimensións, etc.
  • dimens.xml Están declaradas as dimensións que se usaban no layout.
  • strings.xml Están declaradas cadeas de texto. A última é usada no layout, logo veremos onde se usan as demais.
  • colors.xml Están declaradas constantes que representar unha cor.
  • styles.xml Están declaradas constantes que representan estilos (como se van representar os elementos gráficos e as activities, como podan ser a combinación de cores, negrilla, cursiva, se vai ter menú,...)
  • Hai máis arquivos e cartafoles para xa o iremos vendo.

Nota: Todos son arquivos de configuración son XML que poden ser editados. Máis información neste enlace.


/assets

  • Contén o resto de ficheiros que se precisen para a aplicación: ficheiros de configuración, de datos, bases de datos,etc... Para acceder a estes recursos non se fai a a través da clase R senón que se fai a través da súa ruta no sistema.
  • No Android Studio o cartafol 'assets' non se atopa creado por defecto. Para crealo temos que ir ao módulo /app/ e premendo o botón dereito escoller a opción New => Folder => Assets Folder como se va na seguinte imaxe:
PDM UD1 Estrutura 4.jpg


Ficheiro AndroidManifest.xml

  • Contén a definición das características máis importantes da aplicación: nome, versión, icona, activities, servizos, instrumentación, permisos de acceso aos recursos, etc.
PDM UD1 Estrutura 5.jpg
  • Na imaxe se pode ver entre outros datos:
  • Nome da icona a cargar (fai referencia a unha icona que se atopa en /app/res/mipmaps/
  • Nome da aplicación que está definido nunha constante no arquivo /res/values/strings.xml. Ven ser o nome que aparece asociado a icona da aplicación.
  • O aspecto que vai ter a aplicación (ven ser coma un arquivo CSS de HTML). Se atopa no arquivo /res/values/styles.xml.
  • As activities que conforman o proxecto. Inicialmente so temos unha.


Identificar o minSDK, targetSDK e buildSDK

  • Anteriormente en Eclipse, dentro do arquivo AndroidManifest.xml tamén ían as liñas que indicaban o targetSDK e minSDK.
Estes conceptos (polo menos un deles) o vimos no proceso de creación do proxecto Ola Mundo. Se vos fixaches no paso un, indicabamos o minSDK no que ía funcionar a nosa aplicación.
Lembrar que o minSDK indica a versión de Android máis pequena no que o noso proxecto funcionaría. Isto o facemos para poder utilizar funcións e avances das versións seguintes do S.O. Android que non estaban dispoñibles en versións anteriores.
Por outra banda o targetSDK indica a versión de Android no que o programador testou a aplicación.
Existe outro parámetro que ven ser o buildSDK que indica a versión de Android co que foi compilado o proxecto.


Cambiando o tipo de vista no Android Studio

  • En Android Studio podemos cambiar como visualizamos o proxecto da Aplicación.
  • Inicialmente estamos na vista Android, pero podemos cambiar a calquera outra premendo no combo indicado na seguinte imaxe:
PDM UD1 Estrutura 6.jpg


Por exemplo, dentro da vista Proyect podemos ter acceso a outros cartafoles interesantes:

/generated

  • O cartafol /generetad contén codigo Java creado automaticamente ao compilar a aplicación. O ficheiro máis importante é R.java.

[[Imagen::PDM_UD1_Estrutura_10.jpg|center|400px]]

  • Esta clase é compilada cada vez que modificamos algo no cartafol /app/res. O que fai e asinar a cada recurso que se atopa en /res/ un identificador. Desa forma imos poder referencialos na programación polo seu nome.
  • Neste exemplo se pode ver como dálle un id ao layout e na clase R xera automaticamente unha entrada para ese id asinándolle un número.

[[Imagen::PDM_UD1_Estrutura_11.jpg|center|400px]] [[Imagen::PDM_UD1_Estrutura_12.jpg|center|400px]]


/ouputs

  • Unha vez que se compila e se constrúe (build) a aplicación xérase o apk da aplicación para poder ser instalada nun dispositivo. O apk ven ser un exe dun computador con sistema operativo Windows.

[[Imagen::PDM_UD1_Estrutura_13.jpg|center|400px]]


  • Para poder xerar o apk hai que, ou ven executar o proxecto para que xere o apk e o instale nun dispositivo ou simplemente xerar o apk:

[[Imagen::PDM_UD1_Estrutura_14.jpg|center|400px]]


  • Por defecto xera unha versión da aplicación para 'probas', ou en modo 'depuración'. Xa veremos máis adiante como facer que xere un apk para distribuír, na sección de Empaquetado e distribución.


Importando clases necesarias dentro dunha activity

Manualmente

  • Cando utilizamos novas clases dentro dunha actiivity, é necesario importalas para poder facer uso delas.
Por exemplo, se quere usar un TextView (ven ser un label de texto), podería poñer este código na Activity:
 1 public class MainActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7 
 8         TextView texto = new TextView(this);
 9     }
10 }
Ao facelo, veremos que se pon en vermello a clase TextView e que se nos informa que podemos premer a combinación de teclas Alt + Intro:

PDM UD1 CoñecendoAndroidStudio 1.jpg


Se prememos dita combinación podemos ver como se engade automaticamente o 'import' correspondente a clase TextView:
 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.widget.TextView;
 4 
 5 public class MainActivity extends Activity {
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main);
11 
12         TextView texto = new TextView(this);
13     }
14 }


Automaticamente

  • Para facer que o Android Studio importe automaticamente as clases, debemos cambiar a configuración do IDE:

Unha vez feito o anterior xa engade automaticamente as clases.



  • Pode suceder que ao querer utilizar unha clase, esta poda provir de dous paquetes diferentes. Neste caso teremos que utilizar a combinación de clase Alt+Intro e escoller o paquete correcto:



Modificando a versión compilada de debug a release





-- Ángel D. Fernández González -- (2016).