Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Como otimizar a entrega de seu aplicativo Andro...

Como otimizar a entrega de seu aplicativo Android com App Bundle?

Talk ministrada no TDC SP 2020.
Onde falo sobre os benefícios de se entregar apps com App Bundle e como implementar Dynamic Delivery.
Mais informações aqui: https://medium.com/android-dev-br/implementando-jetpack-navigation-component-com-m%C3%B3dulos-de-features-din%C3%A2micas-no-android-e604c13d235f

Angélica Oliveira

August 25, 2020
Tweet

More Decks by Angélica Oliveira

Other Decks in Technology

Transcript

  1. GLOBAL SOFTWARE CONSULTANCY Como otimizar a entrega de seu aplicativo

    Android com App Bundle? Angélica Oliveira 1
  2. HEY THERE! ANGÉLICA OLIVEIRA Android Developer @ThoughtWorks Co-organizer @GDGSaoPaulo &

    @kotlinmeetupsp Twitter @AngOliveiraa Linkedin @angelica-oliv 2
  3. SOBRE O QUE VAMOS FALAR? 3 Desenvolvimento Android Moderno …….……….………..…...….……….……….……….……….……….……….

    4 - 9 Intro App Bundle ………………………..….……….……….……….……….……….……….……….………………….…….. 10 - 14 Intro Dynamic Features ………..………....……….……….……….…….……….……….……….……….……….………. 15 - 23 Implementação e Explicações ……….…..…….……….……….…….……….……….……….……….……….………. 24 - 44 Links ……………………………………….……….……….……….……….……….……….………………………………………... 45 - 47 Finalização ……………………………..……….……….……….……….……….……….……….……….……….……………... 48
  4. DESENVOLVIMENTO ANDROID MODERNO 5 - Kotlin - Android Studio -

    Jetpack - Jetpack Compose - App Bundle
  5. DESENVOLVIMENTO ANDROID MODERNO 6 - Kotlin - Android Studio -

    Jetpack - Jetpack Compose - App Bundle
  6. DESENVOLVIMENTO ANDROID MODERNO 7 - Kotlin - Android Studio -

    Jetpack - Jetpack Compose - App Bundle
  7. DESENVOLVIMENTO ANDROID MODERNO 8 - Kotlin - Android Studio -

    Jetpack - Jetpack Compose - App Bundle
  8. DESENVOLVIMENTO ANDROID MODERNO 9 - Kotlin - Android Studio -

    Jetpack - Jetpack Compose - App Bundle
  9. DIMINUIR O TAMANHO DE UM APP? - Otimização dos recursos

    - Strings - Arquitetura para native libraries - Imagens 11
  10. “Important: In the second half of 2021, new apps will

    be required to publish with the Android App Bundle on Google Play. New apps larger than 150 MB must use either Play Feature Delivery or Play Asset Delivery.” https://developer.android.com/guide/app-bundle 12
  11. MENOS DESINSTALAÇÕES 13 Fonte: What a new publishing format means

    for the future of Android (Medium @googleplaydev)
  12. MENOS DESINSTALAÇÕES 14 Fonte: What a new publishing format means

    for the future of Android (Medium @googleplaydev)
  13. COMO PODEMOS DIMINUIR AINDA MAIS O TAMANHO DAS NOSSAS APPS?

    16 Play Feature Delivery possibilita a entrega de features específicas de um aplicativo baseando-se em condições e necessidades do usuário ATRAVÉS DE ENTREGAS DINÂMICAS
  14. CUSTOMIZAR ENTREGA DE FEATURES 19 Através da Play Feature Delivery

    On demand delivery Conditional delivery Install-time delivery
  15. CUSTOMIZAR ENTREGA DE FEATURES 20 Através da Play Feature Delivery

    On demand delivery Conditional delivery Instant delivery Install-time delivery
  16. REQUISITOS FEATURES DINÂMICAS Para versões anteriores a API 21, não

    é possível instalar features On Demand. API Mínima Android 21 21
  17. REQUISITOS FEATURES DINÂMICAS Para versões anteriores a API 21, não

    é possível instalar features On Demand. API Mínima Android 21 22 Aplicativo com módulos que representam features. Modularizar app de acordo com as features
  18. REQUISITOS FEATURES DINÂMICAS Para versões anteriores a API 21, não

    é possível instalar features On Demand. API Mínima Android 21 23 Aplicativo com módulos que representam features. Modularizar app de acordo com as features Pode alterar a arquitetura do aplicativo. Criação de um módulo base
  19. APP EXEMPLO -> VISUALIZAR E FAVORITAR GIFS - Tela principal

    de visualização - Tela de visualização das favoritas
  20. APP EXEMPLO -> VISUALIZAR E FAVORITAR GIFS - Tela principal

    de visualização -> módulo app - Tela de visualização das favoritas -> módulo favorite
  21. GRADLE MÓDULO APP -> DEPENDÊNCIAS dependencies { // add this

    dependency to your app/build.gradle file implementation "com.google.android.play:core:${versions.playcore}" }
  22. AndroidManifest -> TÍTULO E TIPO DO MÓDULO DINÂMICO <manifest package="...">

    <dist:module dist:title="@string/module_title"> <dist:delivery> <dist:on-demand/> </dist:delivery> <dist:fusing dist:include="true" /> </dist:module>
  23. GRADLE MÓDULO DINÂMICO -> PLUGIN E ARQUITETURA // remove this

    line: apply plugin: 'com.android.library' // add this line apply plugin: 'com.android.dynamic-feature' ... dependencies { // add this line implementation project(':app') ... }
  24. GRADLE MÓDULO APP -> ARQUITETURA android { ... // add

    this line dynamicFeatures = [':favorite'] } dependencies { // remove this line: implementation project(':favorite') }
  25. AÇÃO PARA O MÓDULO DINÂMICO - Manualmente através do controle

    com SplitInstallManager - Registro -> onResume, onPause
  26. AÇÃO PARA O MÓDULO DINÂMICO - Manualmente através do controle

    com SplitInstallManager - Registro -> onResume, onPause - SplitInstallStateUpdatedListener -> DOWNLOADING, INSTALLED, INSTALLING, FAILED
  27. AÇÃO PARA O MÓDULO DINÂMICO - Manualmente através do controle

    com SplitInstallManager - Registro -> onResume, onPause - SplitInstallStateUpdatedListener -> DOWNLOADING, INSTALLED, INSTALLING, FAILED - Jetpack Navigation
  28. <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="..." xmlns:app="..." android:id="@+id/gif_list_graph" app:startDestination="@id/gifListFragment"> <fragment android:id="@+id/gifListFragment"

    android:name="...gifapp.giflist.GifListFragment" android:label="GifListFragment" /> </navigation> JETPACK NAVIGATION -> NAV_GRAPH TELA DE LISTAGEM INICIAL
  29. JETPACK NAVIGATION -> DEPENDÊNCIAS NO MÓDULO APP dependencies { def

    nav_version = "2.3.0" api "androidx.navigation:navigation-fragment-ktx:$nav_version" api "androidx.navigation:navigation-ui-ktx:$nav_version" api "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" }
  30. JETPACK NAVIGATION -> NAV_GRAPH AÇÃO E FEATURE DINÂMICA <fragment android:id="@+id/gifListFragment"

    android:name="com.angelicao.gifapp.giflist.GifListFragment" android:label="GifListFragment" > <action android:id="@+id/actionToFavoriteGifListFragment" app:destination="@id/favoriteGifListFragment" /> </fragment> <fragment android:id="@+id/favoriteGifListFragment" android:name="com.angelicao.favorite.FavoriteGifListFragment" app:moduleName="@string/module_favorite" android:label="FavoriteGifListFragment" />
  31. JETPACK NAVIGATION -> NAVEGAÇÃO NA ACTIVITY PRINCIPAL class GifListHostActivity :

    AppCompatActivity(R.layout.activity_gif_list_host) { ... override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_favorite -> { val action = GifListFragmentDirections.actionToFavoriteGifListFragment() findNavController(R.id.main_content).navigate(action) true } } ... }
  32. JETPACK NAVIGATION -> CUSTOMIZAÇÃO DA NAVEGAÇÃO - É possível através

    da implementação dos métodos da classe AbstractProgressFragment - onCancelled() - onFailed(errorCode: Int) - onInstalled() - onProgress(status: Int, bytesDownloaded: Long, bytesTotal: Long)
  33. JETPACK NAVIGATION -> CUSTOMIZAÇÃO DA NAVEGAÇÃO - É possível através

    da implementação dos métodos da classe AbstractProgressFragment - onCancelled() - onFailed(errorCode: Int) - onInstalled() - onProgress(status: Int, bytesDownloaded: Long, bytesTotal: Long) - DynamicInstallMonitor -> observando o campo status
  34. FONTES 47 A new publishing format for the future of

    Android About Android App Bundles Utilizando Módulos Dinâmicos no seu app Android Implementando Jetpack Navigation Component com Módulos de Features Dinâmicas no Android