Diferencia entre revisiones de «PDM UD1 CoñecendoAndroidStudio»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 41 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
==Introdución==
 
==Introdución==
−
*Neste apartado vanse describir os cartafoles e ficheiros máis esenciais dos que se compón un proxecto Android.
+
*Neste apartado vanse describir os cartafoles e arquivos máis esenciais dos que se compón un proxecto Android.
−
*Comezaremos creando un proxecto: '''OlaMundo''', e estudaremos as partes nas que se divide.
+
*Comezaremos creando un proxecto que vai servir de base para desenvolver o curso.
 +
:Se o alumno quere pode crear un proxecto diferente por cada exercicio ou por cada unidade...
  
−
*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>'''
 
  
 +
<br />
 +
==Creando un proxecto Base==
  
−
==Crear un proxecto Android: OlaMundo==
+
 
−
<gallery caption="Ola Mundo" widths="350" heights="300px" perrow="2">
+
* En cada unidade imos crear un paquete diferente dentro do mesmo proxecto.
−
Image:PDM_Interface_1_.jpg| Comezamos creando un novo proxecto de Android.
+
: En cada paquete iremos poñendo as diferentes activities creadas.
−
Image:PDM_Interface_2_.jpg| O '''Nome da aplicación''' é o nome co que se vai mostrar a aplicación no dispositivo: '''U2_01_OlaMundo'''; '''Nome do paquete''' debe ser único para todo aplicación. Constrúese co nome do dominio ao revés, e o identificador da aplicación. Por exemplo se aplicación fose da Consellería de Educación o nome sería: es.xunta.edu.nome_aplicación. Neste caso deixouse o nome que xera por defecto; '''Localización do proxecto''' e o cartafol onde se vai xerar o proxecto.
+
 
−
Image:PDM_Interface_3_.jpg| Android Studio permite crear proxectos para todo tipo de dispositivos (reloxos, televisións,..) nos escolleremos a opción '''Phone and Tablets'''
+
 
−
Image:PDM_Interface_4_.jpg| Indicamos o tipo de Activity a crear. Podemos identificar unha activity cunha pantalla do proxecto (aínda que non sempre é así). Cun proxecto sempre se crea unha activity. Imos indicar que non teña nada escollendo a opción '''Empty Activity'''.
+
 
−
Image:PDM_Interface_5_.jpg| Como paso final indicamos o nome da activity e do seu layout (un layout ven ser a parte gráfica da activity, imos especificar a posición dos botóns, caixas de texto,...).  O layout soamente pode ter letras minúsculas, números e _. Desmarcaremos o check '''Backwards Compatibility'''. Isto fai que ao proxecto non se engada unha librería de compatibilidade. As librerías de compatibilidade son usadas por Android para que as novas funcionalidades que van aparecendo poidan ser utilizadas por versións anteriores. Máis información [https://developer.android.com/topic/libraries/support-library/features.html neste enlace]. Prememos o botón '''Finish'''.  
+
* Crea un novo proxecto:
−
Image:PDM_Interface_6_.jpg| Observar como o nome da clase Java garda relación co indicado na imaxe anterior.
+
:* Indicamos que imos desenvolver unha aplicación para móbil.
−
Image:PDM_Interface_7_.jpg| O mesmo acontece co ficheiro XML do layout.
+
:* Escollemos unha dos padróns. No exemplo será unha pantalla en branco.
−
Image:PDM_Interface_8_.jpg| Ficheiro XML que define o Layout e os elementos que o compoñen. Por agora ten unha etiqueta.
+
[[Imagen:PDM_Activity_17.jpg|500px|center]]
 +
 
 +
 
 +
:* Nome da aplicación: '''Aprendiendo'''.
 +
:* Nome do paquete: '''cursoandroid.cursoandroid.aprendiendo'''
 +
:* Cartafol onde se garda o proxecto: Podemos deixar o que trae por defecto.
 +
:* Language: '''Java'''
 +
:* Min API Level: 19
 +
:* <u>Marcaremos a opción de androidx</u> (non está marcada na imaxe)
 +
 
 +
[[Imagen:PDM_Activity_18.jpg|500px|center]]
 +
: Prememos o botón '''Finish'''.
 +
 
 +
 
 +
 
 +
<br />
 +
::'''NOTA:''' Se queredes desmarcar a última opción (androix) e non vos deixa quitala, unha vez creado o proxecto deberedes ir ao arquivo '''gradle.properties''' e cambiar as propiedades 'enableJetifier' e 'useAndroidX' a false. Unha vez cambiadas teredes que premer o enlace 'sync now' que aparece arriba á dereita.
 +
[[Imagen:PDM_Activity_18b.jpg|700px|center]]
 +
 
 +
:: <u>Tamén deberedes de borrar todas as bibliotecas de compatibilidade que sexan del tipo androix e que se atopan no arquivo build.gradle(nivel de Módulo)</u>
 +
:: Podedes consultar [https://developer.android.com/jetpack/androidx/migrate/artifact-mappings neste enlace] os 'implementation' específicos de androidx, pero se sabe facilmente  polo seu nome.
 +
 
 +
 
 +
 
 +
 
 +
 
 +
<br />
 +
* Datos do arquivo '''build.gradle''' a nivel de módulo (pode ser que teñades outras versións dependendo da versión do Android Studio instalada):
 +
::* MinSDK: 19: '''É o que indicamos cando creamos o proxecto'''
 +
::* Target_SDK: 28
 +
::* Compile_SDK: 28
 +
 
 +
::* Build Toos: 28 (ou a que haia no momento de instalar o Android Studio)
 +
 
 +
: <u>Nota:</u> Explicaremos o significado [http://wiki.cifprodolfoucha.es/index.php?title=PDM_UD1_Co%C3%B1ecendoAndroidStudio#Identificar_o_minSDK.2C_targetSDK_e_buildSDK  posteriormente nesta mesma sección].
 +
 
 +
[[Imagen:PDM_Activity_0.jpg|500px|center]]
 +
 
 +
 
 +
 
 +
* Ao longo do curso, crearanse diferentes paquetes (ven ser como subdirectorios).
 +
: Vexamos un exemplo de como crear un novo paquete de nome '''tiposactivities'''' (é un exemplo)
 +
 
 +
: <u>Deixa a lo menos unha activity no paquete inicial, xa que se non a nivel gráfico o Android Studio o fai desaparecer.</u>
 +
 
 +
<gallery caption="Creando un novo paquete" widths="350" heights="300px" perrow="2">
 +
Image:PDM_Activity_12.jpg| Botón dereito sobre o paquete no que queremos crear un subpaquete.
 +
Image:PDM_Activity_13.jpg| Introducimos o nome do paquete a crear.
 
</gallery>
 
</gallery>
  
 +
: Agora, premendo o botón dereito sobre o novo paquete podemos crear novas activities que irán nel.
 +
: En calquera momento podemos mover activities dun paquete a outro (arrastrando có rato) pero ao facelo aparecerá unha ventá na que teremos que escoller a opción '''Refactor'''.
  
−
==Ficheiros do proxecto Android==
+
 
 +
 
 +
 
 +
* Aínda que non está indicado nas diferentes activities creadas, cada vez que se cre <u>unha activity de tipo '''launcher'''</u> modificaremos o arquivo '''AndroidManifiest.xml''' para darlle un label a cada unha delas. O dato do label será o mesmo que o nome da activity. Isto o facemos para poder identificala dentro do emulador/dispositivo se imos á pantalla onde se ven todas as aplicacións instaladas:
 +
<syntaxhighlight lang="java" line highlight="2">
 +
        <activity android:name=".UI.UD02_01_ConstraintLayout"
 +
                  android:label="UD02_01_ConstraintLayout" >
 +
            <intent-filter>
 +
                <action android:name="android.intent.action.MAIN" />
 +
                <category android:name="android.intent.category.LAUNCHER" />
 +
            </intent-filter>
 +
        </activity>
 +
</syntaxhighlight>
 +
: Neste caso a activity está nun paquete de nome UI, pero o nome da activity é: UD02_01_ConstraintLayout
 +
 
 +
: Se executamos esta aplicación:
 +
<gallery caption="" widths="350" heights="300px" perrow="2">
 +
Image:PDM_Activity_27.jpg| Arrastramos o rato dende a parte baixa para amosar as aplicacións instaladas no emulador.
 +
Image:PDM_Activity_26.jpg| Aparece a aplicación instalada.
 +
</gallery>
 +
 
 +
 
 +
<br />
 +
 
 +
==Nome das clases e layouts==
 +
 
 +
<gallery caption="" widths="350" heights="300px" perrow="2">
 +
Image:PDM_Interface_9_.jpg| Como sucede en Java, o nome da clase pública debe corresponderse có nome físico do arquivo. Como vemos a clase deriva da clase AppCompactActivity, non da clase Activity. Anteriormente AndroidStudio deixaba indicar isto, pero agora non. Ao longo desta Wiki ides ver exemplos de código no que as activities derivan da clase Activity. Non faremos caso e faremos que todas as activities deriven de AppCompactActivity (lembrade cambialo).
 +
Image:PDM_Interface_10_.jpg| Se queremos cambiar o nome <u>non vale con só cambiar o nome da clase</u> xa que esta emprégase en outros sitios,como no AndroidManifiest.xml
 +
Image:PDM_Interface_11_.jpg| Prememos o botón dereito sobre o que queremos cambiar e escollemos a opción '''Refactor''' => '''Rename'''.
 +
Image:PDM_Interface_12.jpg| O layout é onde se atopan os compoñentes gráficos da activity seguindo unha distribución. Podemos acceder premendo a tecla Control e premendo có rato no nome do layout...
 +
Image:PDM_Interface_13.jpg| Ou podemos ir ao cartafol res => layout e premer dúas veces có rato sobre o mesmo.
 +
Image:PDM_Interface_14.jpg| Para cambiar o nome faremos o mesmo que no caso da clase
 +
</gallery>
 +
 
 +
 
 +
 
 +
<br />
 +
 
 +
==Cartafoles nun proxecto Android==
 
A continuación imos ver os contidos dos distintos cartafoles que compoñen un proxecto.
 
A continuación imos ver os contidos dos distintos cartafoles que compoñen un proxecto.
  
Línea 43: Línea 132:
 
===/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úmeros e _ .Se se pon outro carácter o proxecto dará un erro de compilación.
 +
 
  
  
Línea 49: Línea 141:
  
  
−
:* /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 [https://developer.android.com/images/screens_support/screens-ranges.png imaxe]).
+
:* /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 un 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 [https://developer.android.com/images/screens_support/screens-ranges.png 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/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/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. Podemos ver ese cartafoles se cambiamos a vista a 'Proyect' como veremos posteriormente.
  
 
:* /app/res/values: Almacena constantes que definen: cadeas de texto, estilos, cores, dimensións, etc.
 
:* /app/res/values: Almacena constantes que definen: cadeas de texto, estilos, cores, dimensións, etc.
Línea 66: Línea 158:
 
<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===
+
===/assets===
−
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">
+
* 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.
−
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 ...
+
* 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:
−
Image:Android_2013_U2_01_OlaMundo_20.jpg| ... no código fonte asociado á Actividade que lanza a aplicación.
+
 
 +
[[Imagen:PDM_UD1_Estrutura_4.jpg|center|400px]]
 +
 
 +
 
 +
===Arquivo 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.
 +
 
 +
[[Imagen:PDM_UD1_Estrutura_5.jpg|center|400px]]
 +
 
 +
* 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/
 +
:: Podemos crear novas seguindo [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Image_Asset_Studio este entrada da Wiki].
 +
:* 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 [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.
 +
 
 +
 
 +
* Como comentamos anteriormente, a API vai determinar a versión do S.O. no que imos desenvolver a aplicación.
 +
: Cada nova versión incorpora novos compoñentes gráficos e novas funcionalidades, pero temos que manter un equilibrio entre a versión a escoller e o[http://wiki.cifprodolfoucha.es/index.php?title=Introduci%C3%B3n_a_Android:_Versi%C3%B3ns,_APIS_e_SDK#Versi.C3.B3ns_e_APIS  mercado que queiramos acaparar].
 +
 
 +
* A API tamén vai determinar que aplicacións poden ser instaladas no dispositivo móbil, xa que unha aplicación desenvolvida para unha versión superior non pode ser instalada nun S.O. Android cunha versión inferior.
 +
 
 +
* Á hora de determinar a API nun proxecto Android teremos que escoller o seguinte:
 +
:* '''MIN SDK''': Será a API mínima (versión do S.O. Android) no que a nosa aplicación poderá funcionar. Non se poderá instalar nunha versión anterior.
 +
:* '''TARGET SDK''': Indica que versión do S.O. Android no que está probada a nosa aplicación e sabemos que funciona correctamente. Normalmente ponse a máis alta. Podería funcionar nunha versión posterior ou inferior (sempre que sexa maior que o minSdk). O uso dun target ou outro pode influír no aspecto da nosa aplicación en tempo de execución (por exemplo, pode cambiar o theme ou aspecto por defecto, en función do target)
 +
:* '''BUILD SDK ou Compile SDK''': Indica a versión do SDK que utilizamos para compilar a nosa aplicación. Isto vai limitar os recursos que podamos empregar no desenvolvemento da aplicación, xa que se por exemplo, temos unha nova funcionalidade nun API por exemplo, na API 22, e nos temos marcado un BUILD_SDK de 19, non poderemos facer uso del. O build_sdk sempre terá que ser maior o igual ao min_sdk.
 +
 
 +
: Normalmente se segue a regra: minSdkVersion (mínima posible) <= targetSdkVersion == compileSdkVersion (máis alta posible SDK)
 +
 
 +
 
 +
<gallery caption="Especificando a API dun proxecto Android" widths="350" heights="300px" perrow="2">
 +
Image:PDM_AndroidStudio_Prox_API_1.jpg| En la barra de tarefas escollemos a opción '''Project Structure'''.
 +
Image:PDM_AndroidStudio_Prox_API_2.jpg| Tamén podemos ir dende o menú principal ou coa combinación de teclas indicada.
 +
Image:PDM_AndroidStudio_Prox_API_3.jpg| Debemos escoller o '''módulo App''' e na lapela '''Properties''' temos o <u>BUILD SDK</u>. Deberemos asegurarnos de que estea tamén seleccionado un '''build-tools''', normalmente a última versión.
 +
Image:PDM_AndroidStudio_Prox_API_4.jpg| Na lapela '''Default Config''' temos a <u>MIN SDK e TARGET SDK</u>.
 +
Image:PDM_AndroidStudio_Prox_API_4B.jpg| Estes cambios son reflectidos no arquivo '''build.gradle''' a nivel de módulo.
 
</gallery>
 
</gallery>
  
−
===/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]]
 
  
 +
<u>Nota:</u> Estes datos se poden definir no arquivo '''AndroidManifiest.xml''', pero se están nos dous sitios, terá preferencia (sobreescribe) o que se atope no arquivo '''build.gradle'''.
 +
 +
<br />
 +
 +
==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===
  
−
===/bin===
 
−
*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">
 
  
−
Image:Android_2013_U2_01_OlaMundo_26.jpg| Antes de compilar non hai '''apk'''.
+
<gallery caption="Cartafol generated" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_01_OlaMundo_27.jpg| Compilamos, lanzando a aplicación como unha Aplicación Android.
+
Image:PDM_UD1_Estrutura_10.jpg | Dentro do cartafol '''/generetad''' atópase o código Java creado automaticamente ao compilar a aplicación. O ficheiro máis importante é '''R.java'''.  
−
Image:Android_2013_U2_01_OlaMundo_28.jpg| Lanzando a aplicación
+
Image:PDM_UD1_Estrutura_10B.jpg | A partires de Android Studio 3.6 a clase R.java deixa de estar accesible e o plugin gradle xera automaticamente a clase compilada coma R.class dentro do arquivo R.jar
−
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>
 
</gallery>
  
−
===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">
+
<br />
−
Image:Android_2013_U2_01_OlaMundo_39.jpg| Facemos dobre click nel e vemos a lapela '''Manifest'''
+
* 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.
−
Image:Android_2013_U2_01_OlaMundo_41.jpg| Maximizámola ...
+
 
−
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.
+
* 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.
−
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.
+
 
−
Image:Android_2013_U2_01_OlaMundo_44.jpg| Non hai ningún permiso definido por defecto.
+
<gallery widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_01_OlaMundo_45.jpg| Esta aplicación tampouco ten definida ningunha instrumentación do dispositivo para ser usada por ela.
+
Image:PDM_UD1_Estrutura_11.jpg
−
Image:Android_2013_U2_01_OlaMundo_46.jpg| Todo o anterior, pero en formato xml editable.
+
Image:PDM_UD1_Estrutura_12.jpg|  
−
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.
 
 
</gallery>
 
</gallery>
 +
 +
===/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:
Línea 162: Línea 316:
 
Image:PDM_UD1_CoñecendoAndroidStudio_2.jpg| Debemos ir ao '''Settings''' do IDE, como indica a imaxe ou premendo a combinación de teclas '''Control + Alt + S'''.
 
Image:PDM_UD1_CoñecendoAndroidStudio_2.jpg| Debemos ir ao '''Settings''' do IDE, como indica a imaxe ou premendo a combinación de teclas '''Control + Alt + S'''.
 
Image:PDM_UD1_CoñecendoAndroidStudio_3.jpg| Agora debemos ir pola árbore da esquerda ás seccións '''Editor''' -> '''General''' -> '''Auto Import'''
 
Image:PDM_UD1_CoñecendoAndroidStudio_3.jpg| Agora debemos ir pola árbore da esquerda ás seccións '''Editor''' -> '''General''' -> '''Auto Import'''
−
Image:PDM_UD1_CoñecendoAndroidStudio_4.jpg| Debemos cambiar a opción: '''Insert imports on paste''' ao valor '''ALL''' e marcar o checkbox '''Add unanbiguous on the fly'''.
+
Image:PDM_UD1_CoñecendoAndroidStudio_4.jpg| Debemos cambiar a opción: '''Insert imports on paste''' ao valor '''ALL''' e marcar o checkbox '''Add unanbiguous on the fly'''. Se queremos que ademais elimine os paquetes que xa non se usan marcaremos a opción 'Optimized imports on the fly'.
 
</gallery>
 
</gallery>
  
Línea 176: Línea 330:
 
Image:PDM_UD1_CoñecendoAndroidStudio_6.jpg| Aparece unha ventá na que teremos que escoller o paquete correcto.
 
Image:PDM_UD1_CoñecendoAndroidStudio_6.jpg| Aparece unha ventá na que teremos que escoller o paquete correcto.
 
</gallery>
 
</gallery>
 +
 +
==Modificando a versión compilada de debug a release==
 +
 +
 +
* Para instalar unha aplicación de Android Studio nun dispositivo móbil necesitamos xerar un arquivo '''APK'''.
 +
* Por defecto Visual Studio xera un apk en modo debugger. Neste modo, cando xeramos o apk, a aplicación estará 'firmada' cun certificado xerado pola ferramenta Android SDK  e que non será válido para instalar dende a 'Google Play Store', se a publicamos.
 +
 +
* Cando vexamos o [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Empaquetado_e_distribuci%C3%B3n#Modificando_a_versi.C3.B3n_compilada_de_debug_a_release punto de Enpaquetado e Distribución] amosaremos como xerar o apk release.
 +
 +
 +
 +
 +
<br />
 +
==Executando unha aplicación==
 +
 +
 +
<gallery caption="Executando unha aplicación" widths="350" heights="300px" perrow="2">
 +
Image:PDM_AndroidStudio_coñecendoIde10.jpg| Podemos ou executar unha aplicación en modo 'normal' (en vermello) ou en modo 'debugger' (en azul). Al facelo aparecerán os AVD dispoñibles, indicando os que xa están en execución. Deberemos marcar un deles para que a aplicación se instale nel e se execute.
 +
Image:PDM_AndroidStudio_coñecendoIde11.jpg| Imaxe da aplicación nun emulador.
 +
</gallery>
 +
 +
 +
 +
 +
 +
<br />
 +
==Configuracións de execución==
 +
 +
https://developer.android.com/studio/projects/add-app-module
 +
 +
 +
 +
  
  
  
  
−
==Modificando a versión compilada de debug a release==
 
  
  
  
−
* Máis información [https://developer.android.com/studio/run/index.html neste enlace].
 
  
  
Línea 191: Línea 376:
  
  
−
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]]  -- (2016).
+
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]]  -- (2019).

Revisión actual del 14:59 1 nov 2020

Introdución

  • Neste apartado vanse describir os cartafoles e arquivos máis esenciais dos que se compón un proxecto Android.
  • Comezaremos creando un proxecto que vai servir de base para desenvolver o curso.
Se o alumno quere pode crear un proxecto diferente por cada exercicio ou por cada unidade...



Creando un proxecto Base

  • En cada unidade imos crear un paquete diferente dentro do mesmo proxecto.
En cada paquete iremos poñendo as diferentes activities creadas.


  • Crea un novo proxecto:
  • Indicamos que imos desenvolver unha aplicación para móbil.
  • Escollemos unha dos padróns. No exemplo será unha pantalla en branco.
PDM Activity 17.jpg


  • Nome da aplicación: Aprendiendo.
  • Nome do paquete: cursoandroid.cursoandroid.aprendiendo
  • Cartafol onde se garda o proxecto: Podemos deixar o que trae por defecto.
  • Language: Java
  • Min API Level: 19
  • Marcaremos a opción de androidx (non está marcada na imaxe)
PDM Activity 18.jpg
Prememos o botón Finish.



NOTA: Se queredes desmarcar a última opción (androix) e non vos deixa quitala, unha vez creado o proxecto deberedes ir ao arquivo gradle.properties e cambiar as propiedades 'enableJetifier' e 'useAndroidX' a false. Unha vez cambiadas teredes que premer o enlace 'sync now' que aparece arriba á dereita.
PDM Activity 18b.jpg
Tamén deberedes de borrar todas as bibliotecas de compatibilidade que sexan del tipo androix e que se atopan no arquivo build.gradle(nivel de Módulo)
Podedes consultar neste enlace os 'implementation' específicos de androidx, pero se sabe facilmente polo seu nome.




  • Datos do arquivo build.gradle a nivel de módulo (pode ser que teñades outras versións dependendo da versión do Android Studio instalada):
  • MinSDK: 19: É o que indicamos cando creamos o proxecto
  • Target_SDK: 28
  • Compile_SDK: 28
  • Build Toos: 28 (ou a que haia no momento de instalar o Android Studio)
Nota: Explicaremos o significado posteriormente nesta mesma sección.
PDM Activity 0.jpg


  • Ao longo do curso, crearanse diferentes paquetes (ven ser como subdirectorios).
Vexamos un exemplo de como crear un novo paquete de nome tiposactivities' (é un exemplo)
Deixa a lo menos unha activity no paquete inicial, xa que se non a nivel gráfico o Android Studio o fai desaparecer.
Agora, premendo o botón dereito sobre o novo paquete podemos crear novas activities que irán nel.
En calquera momento podemos mover activities dun paquete a outro (arrastrando có rato) pero ao facelo aparecerá unha ventá na que teremos que escoller a opción Refactor.



  • Aínda que non está indicado nas diferentes activities creadas, cada vez que se cre unha activity de tipo launcher modificaremos o arquivo AndroidManifiest.xml para darlle un label a cada unha delas. O dato do label será o mesmo que o nome da activity. Isto o facemos para poder identificala dentro do emulador/dispositivo se imos á pantalla onde se ven todas as aplicacións instaladas:
1         <activity android:name=".UI.UD02_01_ConstraintLayout"
2                   android:label="UD02_01_ConstraintLayout" >
3             <intent-filter>
4                 <action android:name="android.intent.action.MAIN" />
5                 <category android:name="android.intent.category.LAUNCHER" />
6             </intent-filter>
7         </activity>
Neste caso a activity está nun paquete de nome UI, pero o nome da activity é: UD02_01_ConstraintLayout
Se executamos esta aplicación:



Nome das clases e layouts



Cartafoles nun 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úmeros 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 un 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. Podemos ver ese cartafoles se cambiamos a vista a 'Proyect' como veremos posteriormente.
  • /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


Arquivo 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/
Podemos crear novas seguindo este entrada da Wiki.
  • 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.


  • Como comentamos anteriormente, a API vai determinar a versión do S.O. no que imos desenvolver a aplicación.
Cada nova versión incorpora novos compoñentes gráficos e novas funcionalidades, pero temos que manter un equilibrio entre a versión a escoller e omercado que queiramos acaparar.
  • A API tamén vai determinar que aplicacións poden ser instaladas no dispositivo móbil, xa que unha aplicación desenvolvida para unha versión superior non pode ser instalada nun S.O. Android cunha versión inferior.
  • Á hora de determinar a API nun proxecto Android teremos que escoller o seguinte:
  • MIN SDK: Será a API mínima (versión do S.O. Android) no que a nosa aplicación poderá funcionar. Non se poderá instalar nunha versión anterior.
  • TARGET SDK: Indica que versión do S.O. Android no que está probada a nosa aplicación e sabemos que funciona correctamente. Normalmente ponse a máis alta. Podería funcionar nunha versión posterior ou inferior (sempre que sexa maior que o minSdk). O uso dun target ou outro pode influír no aspecto da nosa aplicación en tempo de execución (por exemplo, pode cambiar o theme ou aspecto por defecto, en función do target)
  • BUILD SDK ou Compile SDK: Indica a versión do SDK que utilizamos para compilar a nosa aplicación. Isto vai limitar os recursos que podamos empregar no desenvolvemento da aplicación, xa que se por exemplo, temos unha nova funcionalidade nun API por exemplo, na API 22, e nos temos marcado un BUILD_SDK de 19, non poderemos facer uso del. O build_sdk sempre terá que ser maior o igual ao min_sdk.
Normalmente se segue a regra: minSdkVersion (mínima posible) <= targetSdkVersion == compileSdkVersion (máis alta posible SDK)



Nota: Estes datos se poden definir no arquivo AndroidManifiest.xml, pero se están nos dous sitios, terá preferencia (sobreescribe) o que se atope no arquivo build.gradle.


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



  • 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.

/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.
PDM UD1 Estrutura 13.jpg


  • 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:
PDM UD1 Estrutura 14.jpg


  • 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

  • Para instalar unha aplicación de Android Studio nun dispositivo móbil necesitamos xerar un arquivo APK.
  • Por defecto Visual Studio xera un apk en modo debugger. Neste modo, cando xeramos o apk, a aplicación estará 'firmada' cun certificado xerado pola ferramenta Android SDK e que non será válido para instalar dende a 'Google Play Store', se a publicamos.




Executando unha aplicación




Configuracións de execución

https://developer.android.com/studio/projects/add-app-module










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