Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android: Integração Contínua & Entrega Contínua
Search
Rafael Toledo
April 20, 2018
Programming
180
3
Share
Android: Integração Contínua & Entrega Contínua
Apresentado na Trilha Android do TDC Florianópolis 2018
Rafael Toledo
April 20, 2018
More Decks by Rafael Toledo
See All by Rafael Toledo
Gamedev com Kotlin Native
rafaeltoledo
0
110
Kotlin Multiplataforma: Compartilhando código entre Android e iOS
rafaeltoledo
0
300
Motion Layout
rafaeltoledo
1
170
Pipeline Android
rafaeltoledo
3
190
Android Architecture Components
rafaeltoledo
7
190
What's New in Kotlin 1.3
rafaeltoledo
0
170
An Overview of Multiplatform Kotlin
rafaeltoledo
2
150
Compartilhando Código com Kotlin Multiplataforma
rafaeltoledo
2
280
Android Assíncrono
rafaeltoledo
3
240
Other Decks in Programming
See All in Programming
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
170
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
360
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
実践CRDT
tamadeveloper
0
170
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
220
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
520
20260320登壇資料
pharct
0
160
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
710
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
340
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
120
感情を設計する
ichimichi
5
1.2k
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
310
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
170
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
150
Docker and Python
trallard
47
3.8k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
670
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
AI: The stuff that nobody shows you
jnunemaker
PRO
4
520
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Visualization
eitanlees
150
17k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
Transcript
ANDROID Integração Contínua & Entrega Contínua
Rafael Toledo Consultor na ThoughtWorks Especialista em Android Mobile desde
2012 rafaeltoledo.net twitter.com/_rafaeltoledo github.com/rafaeltoledo medium.com/@rafael_toledo
Por que eu preciso disso? • Integração de código •
Todo mundo na mesma página • Execução de testes e validação contínua • Cobertura de código e outras métricas • Releases frequentes 3
Git Flow • Forks ou Branches? • Short lived branches
/ Long lived branches • Pull Requests / Merge Requests • Code Review 4
5
O que você procura em um code review? 6
7 Code Review O que devo procurar em um code
review? https://bit.ly/2JabM5R
None
None
None
Self-Hosted x Cloud
Self-Hosted x Cloud
Self-Hosted x Cloud
Cloud - CircleCI • Cota gratuita para repositórios privados •
Github ou Bitbucket • Facilidade de configuração • Suporte a Docker 14
.circleci/config.yml version: 2 jobs: build: working_directory: ~/my-project docker: - image:
circleci/android:api-27-alpha environment: JVM_OPTS: -Xmx3072m CIRCLE_JDK_VERSION: oraclejdk8 ... 15
.circleci/config.yml ... steps: - checkout - run: name: Accept licenses
command: yes | sdkmanager --licenses || true - run: name: Build release APK Command: ./gradlew assembleRelease 16
None
None
None
Jenkins: setup mínimo 20
None
None
E como ficam os meus segredos nesse bolo todo? 23
# app/build.gradle android { ... signingConfigs { storeFile file("$rootDir/release.jks") storePassword
'12345678' keyAlias 'myawesomeapp' keyPassword '12345678' } }
# app/build.gradle android { ... signingConfigs { storeFile file("$rootDir/release.jks") storePassword
'12345678' keyAlias 'myawesomeapp' keyPassword '12345678' } }
# app/build.gradle android { ... signingConfigs { storeFile file(System.env.RELEASE_STORE_FILE) storePassword
System.env.RELEASE_STORE_PASSWORD keyAlias System.env.RELEASE_KEY_ALIAS keyPassword System.env.RELEASE_KEY_PASSWORD } }
None
criptografa openssl aes-256-cbc -e -in release.keystore -out release.keystore-cipher -md sha256
-k $CIPHER_DECRYPT_KEY 28
descriptografa openssl aes-256-cbc -d -in distribution/release.keystore-cipher -out distribution/release.keystore -md sha256
-k $CIPHER_DECRYPT_KEY 29
None
FIREBASE TEST LAB 31
5 execuções / dia em devices 10 execuções / dia
em emuladores
Robo Test & Espresso
None
Por que o emulador não funciona bem na cloud? 35
... - run: name: Run Tests on Firebase Test Lab
command: | echo "${FIREBASE_TOKEN}" >> "secret.json" curl -0 https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.zip unzip -qq google-cloud-sdk.zip ./google-cloud-sdk/bin/gcloud config set project my-project ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file secret.json
... ./google-cloud-sdk/bin/gcloud firebase test android run --app app/build/outputs/apk/debug/app-debug.apk --test app/build/outputs/apk/androidTest/app-debug-androidTest.apk
--device-ids sailfish,NexusLowRes,hammerhead --os-version-ids 19,23,27 --locales en --orientations portrait
DEPLOY / DELIVERY 38
None
None
None
None
https://docs.fastlane.tools/getting-started/an droid/setup/ 43
lane :beta do gradle(task: 'assemble', build_type: 'Release') upload_to_play_store(track: 'beta') slack(message:
'Successfully distributed a new beta build') end
https://docs.fastlane.tools/getting-started/an droid/screenshots/ 45
... # https://github.com/Triple-T/gradle-play-publisher - run: name: Deploy to Google Play
command: ./gradlew publishApkRelease
# https://github.com/square/spoon Spoon.screenshot(activity, "initial_state");
The Social Project rafaeltoledo.net medium.com/the-social-app github.com/rafaeltoledo/social-app
Links CIRCLECI https://circleci.com JENKINS https://jenkins.io FIREBASE TEST LAB https://firebase.google.com/docs/test-lab/ SEGMENTIO
ANALYTICS (SETUP CIRCLECI + FIREBASE) https://flutter.io/flutter-for-android/ 49
OBRIGADO Slides disponíveis em: speakerdeck.com/rafaeltoledo 50