# Android dev guidelines
## Style Guides
- Java
- [The official Java style guide for raywenderlich.com](https://github.com/raywenderlich/java-style-guide)
- Kotlin
- [The official Kotlin style guide for raywenderlich.com](https://github.com/raywenderlich/kotlin-style-guide)
## Minimum SDK versions
- [Android 6.0](https://developer.android.com/about/dashboards?hl=pt-br)
**Notas:** Ou pelo menos um que garanta mais de 50% dos devices activos, como primeiro critério; Subir a versão mínima de acordo com as necessidades do projeto, no entanto tem que ser discutido com o Gestor de Projeto.
## Third-Party libraries
Utilizar esta secção para partilhar as bibliotecas utilizadas de modo a simplificar algum desenvolvimento:
- Android
- [Kotest](https://kotest.io/)
- Lib para testes unitários
- [Gradle](https://gradle.org/)
- [Retrofit](https://square.github.io/retrofit/)
- [SDP](https://github.com/intuit/sdp)
- Scalable Size Unit for DP
- [SSP](https://github.com/intuit/ssp)
- Scalable Size Unit for SP
- [View Binding](https://developer.android.com/topic/libraries/view-binding)
- [Glide](https://github.com/bumptech/glide) ou [Fresco](https://frescolib.org/docs/index.html)
- [KPermissions](https://android-arsenal.com/details/1/6689)
- Biblioteca que facilita a gestão das permissões
- [Room](https://developer.android.com/training/data-storage/room/index.html)
- [LifeCycle Extensions](https://developer.android.com/jetpack/androidx/releases/lifecycle)
- [Circle ImageView](https://github.com/hdodenhof/CircleImageView)
- [Input Mask, by RedMadRobot](https://github.com/RedMadRobot/input-mask-android)
- [BiometricPrompt](https://www.androidauthority.com/add-fingerprint-authentication-app-biometricprompt-943784/)
- "By using this library for biometric authentication, we can assure an interface consistency for every app we make, so users know what to expect from this functionality."
- [Sectioned-RecyclerView](https://android-arsenal.com/details/1/4867)
- [Material UI](https://material.io/components/)
## Git
Via terminal ou via [SourceTree](https://www.sourcetreeapp.com/).
## Android Gitignore
Aceder ao ficheiro [aqui](https://github.com/github/gitignore/blob/master/Android.gitignore)
### GitFlow
- 2 branches
- master
- development
- Trabalhar sempre no development
- Quando se está a desenvolver uma feature, criar branch com nome "feature/{nome_feature}"
- Quando se está a fazer um bugfix, criar branch com nome "bugfix/{nome_do_bugfix}"
- Quando é enviada uma versão para a Store e esta é aprovada
- Criar um branch a partir de development com o nome da versão. Ex: release/v1.2.1
- fazer pull request para o master com uma tag da versão ex: v1.2.1
- No branch de release:
1. git add .
2. git commit -m "v1.2.1"
3. git tag v1.2.1
- [Git Basics - Tagging](https://git-scm.com/book/en/v2/Git-Basics-Tagging)
4. git pull
5. git push
6. E agora é possível fazer o pull request para o master via gitlab ou terminal e alguém com permissões de admin irá aceitar o merge request no master
- Continuar a trabalhar no development

**NOTA:** Fazer push sempre no final do dia, caso se esteja a trabalhar em algo, adicionar "WIP:" na mensagem. WIP -> Work In Progress
## Ferramentas de apoio
- [JSON Generator](https://www.json-generator.com/)
- [JsonSchema2POJO](http://www.jsonschema2pojo.org)
- https://jsongrid.com/json-parser
- Converte um JSON em grelha, o que permite exportar também para CSV, agrupando os dados mais relevantes, para facilitar uma compreensão do resultado produzido por uma dada API
- https://pushtry.com/
- [CookieCutter](https://github.com/alexfu/cookiecutter-android)
- Para criar templates de projetos
- [Postman](https://www.getpostman.com/)
- [MakeAppIcon](https://makeappicon.com)
- Best app icon resizer for mobile developers.
- [Android Asset Studio](https://romannurik.github.io/AndroidAssetStudio/index.html)
- A collection of tools to easily generate assets such as launcher icons for your Android app.
- [Android XML naming convention](https://jeroenmols.com/blog/2016/03/07/resourcenaming/)
- [Android Shadow Generator](http://inloop.github.io/shadow4android/)
- A tool to create shadows for Android Views.