SlideShare a Scribd company logo
Membangun Modern App dengan
Jetpack & Android Architecture
Component
Ahmad Arif Faizin
Google Associate Android Developer, Curriculum Developer Dicoding
Modern App
Menggunakan teknologi terbaru
Lebih mudah, lebih cepat, lebih happy
Modern Android Development (MAD) Skills
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component
https://madscorecard.withgoogle.com/scorecard/share/3800404497/
Android Jetpack?
Kiri, Kanan, L1, L2, R1, R2, Atas, Bawah, Kiri, Kanan
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component
Android Jetpack
is a suite of libraries to help developers follow best practices, reduce
boilerplate code, and write code that works consistently across
Android versions and devices so that developers can focus on the
code they care about.
Why Android Jetpack?
"With Android Architecture Components, we're re-architecting our entire
app. It's great to have a Google-endorsed, opinionated, and clean way to
build an Android app that makes it easier to support configuration
changes."
Drew Hannay, Staff Software Engineer, LinkedIn
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component
Now...
85++ libraries
Dibagi berdasarkan :
● Beyond phone
● Data
● Graphics
● Lifecycle
● Media
● Navigation
● Security
● Performance/Test
● UI
Highlighted Libraries
AAC
(Android Architecture Component)
best practices and recommended architecture for
building robust, production-quality apps
Hindari short-term hack!
● Mendesain aplikasi hanya untuk perangkat tertentu saja
● Copy paste kode ke dalam file Anda secara membabi buta
● Menuliskan secara hardcode untuk string yang tampil
● Menempatkan semua business logic dalam file Activity
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component
Why you need good app
architecture?
● Separation of Concern (SoC), memisahkan business logic dan ui logic.
● Memudahkan developer untuk saling berkolaborasi.
● Kode jadi lebih mudah dites.
● Menghemat waktu dan mengurangi technical debt saat project berkembang.
Komponen AAC
Komponen AAC
● ViewModel - Handle data ke UI dan mengatasi configuration change
● LiveData - data holder yang lifecycle-aware dan bisa di-observe secara
real-time untuk mendapatkan data terbaru
● Repository - untuk mengatur beberapa sumber data (network, database,
cache)
● Room - abstraksi di atas SQLite, untuk simpan database dengan lebih simple
dan mudah
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//initiate TextView
//get data from Webservice (DON’T!)
val response = webservice.getUser(userId)
//show data in TextView
}
}
Sample of Bad Code
class UserRepository constructor(
private val webservice: Webservice, //network : retrofit
private val userDao: UserDao //local data : room
) {
suspend fun getUser(userId: String): User {
val userExists = userDao.hasUser()
//jika data local kosong, request network dan masukkan ke local
if (!userExists) {
val response = webservice.getUser(userId)
userDao.save(response.body())
}
return userDao.getUser(userId)
}
}
Sample of Repository
class UserProfileViewModel(
userRepository: UserRepository
) : ViewModel() {
private val _userId = MutableLiveData<String>()
val userId: LiveData<String> = _userId
fun setUserId(userId: String) {
_userId.value = userId
}
val user = Transformations.switchMap(_userId) { id ->
userRepository.getUser(id)
}
}
Sample of ViewModel + LiveData
class MainActivity : AppCompatActivity() {
val viewModel: UserProfileViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//initiate TextView
viewModel.setUserId(userId)
viewModel.user.observe(this, Observer<User> {
//show data in TextView
})
}
}
Sample of Good Code
Best Practice
● Jangan jadikan activity, services, & broadcast sebagai sumber data.
● Buat batasan yang jelas antar modul.
● Expose sedikit mungkin data pada setiap modul.
● Pertimbangkan cara membuat setiap modul dapat diuji secara terpisah.
● Fokuslah pada inti aplikasi Anda supaya lebih bagus dari aplikasi lainnya.
● Sebisa mungkin simpan data yang relevan dan terbaru.
● Tetapkan satu sumber data sebagai single source of truth.
Contact:
@arif_faizin
THANKS!
Follow us: @dicoding

More Related Content

PDF
Persiapan Sebelum Ujian Sertifikasi Associate Android Developer - Ahmad Arif ...
PDF
Dicoding Developer Coaching #29: Android | Case Study: Membuat Unlimited List...
PDF
Belajar Server Side Rendering Yuk! - Dimas Maulana Dwi Saputra
PDF
Dicoding Developer Coaching #28: Android | Menampilkan Jutaan Data dengan Paging
PDF
Dicoding Developer Coaching #25: Android | UI Testing pada Asynchronous denga...
PDF
Memulai Karir sebagai Machine Learning Developer - Tia Dwi Setiani
PPTX
Review Udemy Course #1
PPTX
Android Workshop for Intermediate
Persiapan Sebelum Ujian Sertifikasi Associate Android Developer - Ahmad Arif ...
Dicoding Developer Coaching #29: Android | Case Study: Membuat Unlimited List...
Belajar Server Side Rendering Yuk! - Dimas Maulana Dwi Saputra
Dicoding Developer Coaching #28: Android | Menampilkan Jutaan Data dengan Paging
Dicoding Developer Coaching #25: Android | UI Testing pada Asynchronous denga...
Memulai Karir sebagai Machine Learning Developer - Tia Dwi Setiani
Review Udemy Course #1
Android Workshop for Intermediate

What's hot (13)

PDF
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
PDF
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
PPTX
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & Geofire
PPTX
Beginner's Guide to React & Redux Development
PPTX
Rekayasa web
PDF
ActiveX - Plugin My Project
PPT
Tugas 1 0317
PPTX
Tugas 1 ihsan riadi - 1412511162
PPTX
Pengenalan pemrograman android
PPTX
Presensi SM Findout Project ABC
PPTX
Tutorial jquery Nur Kholifah
PPTX
Tugas 1 0317 individu
PDF
PENGENALAN CODEIGNITER
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & Geofire
Beginner's Guide to React & Redux Development
Rekayasa web
ActiveX - Plugin My Project
Tugas 1 0317
Tugas 1 ihsan riadi - 1412511162
Pengenalan pemrograman android
Presensi SM Findout Project ABC
Tutorial jquery Nur Kholifah
Tugas 1 0317 individu
PENGENALAN CODEIGNITER
Ad

Similar to Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component (20)

PPTX
Tutorial web site aida dan jesika
PDF
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
PPTX
Material design for android (Diggest)
PPTX
PPT Schematics BST 2024 Advanced Day 1.pptx
PDF
Mulai melangkah dengan Node.js
PPTX
Tugas 3 – 0317 (individu)
ODP
Workshop SuBali - CodeIgniter
PPTX
1. Pengenalan Node JS - TSJ-ghjjjgg.pptx
PPTX
SESI 3 FE.pptx
DOC
2072 p1-spk-rekayasa perangkat lunak
PDF
Ekosistem Aplikasi Repositori Institusi
PDF
Panduan Praktikum Pemrograman Sistem Jaringan
PPTX
Pengenalan Framework .NET
PPTX
Pertemuan 1
PDF
Pry open qiscus
PDF
One-gate Library Portal
DOC
Cover
DOC
laporan aplikasi
DOC
Cover
PPTX
Prospektif manajemen informatika dalam dunia kerja
Tutorial web site aida dan jesika
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
Material design for android (Diggest)
PPT Schematics BST 2024 Advanced Day 1.pptx
Mulai melangkah dengan Node.js
Tugas 3 – 0317 (individu)
Workshop SuBali - CodeIgniter
1. Pengenalan Node JS - TSJ-ghjjjgg.pptx
SESI 3 FE.pptx
2072 p1-spk-rekayasa perangkat lunak
Ekosistem Aplikasi Repositori Institusi
Panduan Praktikum Pemrograman Sistem Jaringan
Pengenalan Framework .NET
Pertemuan 1
Pry open qiscus
One-gate Library Portal
Cover
laporan aplikasi
Cover
Prospektif manajemen informatika dalam dunia kerja
Ad

More from DicodingEvent (20)

PDF
Developer Coaching #114.pdf
PDF
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
PPTX
tantangan menjadi developer di abad 21
PDF
Mengenalkan augmented reality (ar) pada snapchat
PDF
Membangun Aplikasi Serverless di Platfrom AWS
PDF
IDCamp X Madrasah: Pengenalan Computational Thinking
PDF
Membuat Produk Digital Terbaik ala Startup Unicorn
PDF
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
PDF
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
PDF
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
PDF
Potensi karier menjadi ios developer di masa depan
PDF
Id camp x dicoding live : persiapan jadi software engineer hebat 101
PDF
Tips sukses berkarir sebagai developer dan programmer 2021
PPTX
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
PDF
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
PDF
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
PDF
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
PDF
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
PDF
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
PDF
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...
Developer Coaching #114.pdf
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
tantangan menjadi developer di abad 21
Mengenalkan augmented reality (ar) pada snapchat
Membangun Aplikasi Serverless di Platfrom AWS
IDCamp X Madrasah: Pengenalan Computational Thinking
Membuat Produk Digital Terbaik ala Startup Unicorn
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
Potensi karier menjadi ios developer di masa depan
Id camp x dicoding live : persiapan jadi software engineer hebat 101
Tips sukses berkarir sebagai developer dan programmer 2021
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...

Recently uploaded (9)

PPTX
Seminar Judul & Proposal kasturi PP.pptx
PPTX
Materi Seminar Minat dan Bakat Untuk Siswa.pptx
PPTX
Beige Scrapbook Geography Presentation_20250804_212012_0000.pptx
PDF
1public speaking._pengantar_public_speaking_rev.pdf
PPT
kesiapan kelembagaan dan networking pondok pesantren
PPTX
Mendidik anak dengan keteladanan dan cinta_20241019_065602_0000.pptx
PPTX
TWIBBONize .pptx
PDF
DAY 1_Kebijakan Pembelajaran Coding dan Kecerdasan Artifisial.pptx (1).pdf
PPTX
PowerPoint Agama Islam Bab 4 Saling Menasihati dalam Islam..pptx
Seminar Judul & Proposal kasturi PP.pptx
Materi Seminar Minat dan Bakat Untuk Siswa.pptx
Beige Scrapbook Geography Presentation_20250804_212012_0000.pptx
1public speaking._pengantar_public_speaking_rev.pdf
kesiapan kelembagaan dan networking pondok pesantren
Mendidik anak dengan keteladanan dan cinta_20241019_065602_0000.pptx
TWIBBONize .pptx
DAY 1_Kebijakan Pembelajaran Coding dan Kecerdasan Artifisial.pptx (1).pdf
PowerPoint Agama Islam Bab 4 Saling Menasihati dalam Islam..pptx

Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component

  • 1. Membangun Modern App dengan Jetpack & Android Architecture Component Ahmad Arif Faizin Google Associate Android Developer, Curriculum Developer Dicoding
  • 2. Modern App Menggunakan teknologi terbaru Lebih mudah, lebih cepat, lebih happy Modern Android Development (MAD) Skills
  • 5. Android Jetpack? Kiri, Kanan, L1, L2, R1, R2, Atas, Bawah, Kiri, Kanan
  • 7. Android Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that developers can focus on the code they care about.
  • 9. "With Android Architecture Components, we're re-architecting our entire app. It's great to have a Google-endorsed, opinionated, and clean way to build an Android app that makes it easier to support configuration changes." Drew Hannay, Staff Software Engineer, LinkedIn
  • 12. Now... 85++ libraries Dibagi berdasarkan : ● Beyond phone ● Data ● Graphics ● Lifecycle ● Media ● Navigation ● Security ● Performance/Test ● UI
  • 14. AAC (Android Architecture Component) best practices and recommended architecture for building robust, production-quality apps
  • 15. Hindari short-term hack! ● Mendesain aplikasi hanya untuk perangkat tertentu saja ● Copy paste kode ke dalam file Anda secara membabi buta ● Menuliskan secara hardcode untuk string yang tampil ● Menempatkan semua business logic dalam file Activity
  • 17. Why you need good app architecture? ● Separation of Concern (SoC), memisahkan business logic dan ui logic. ● Memudahkan developer untuk saling berkolaborasi. ● Kode jadi lebih mudah dites. ● Menghemat waktu dan mengurangi technical debt saat project berkembang.
  • 19. Komponen AAC ● ViewModel - Handle data ke UI dan mengatasi configuration change ● LiveData - data holder yang lifecycle-aware dan bisa di-observe secara real-time untuk mendapatkan data terbaru ● Repository - untuk mengatur beberapa sumber data (network, database, cache) ● Room - abstraksi di atas SQLite, untuk simpan database dengan lebih simple dan mudah
  • 20. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... //initiate TextView //get data from Webservice (DON’T!) val response = webservice.getUser(userId) //show data in TextView } } Sample of Bad Code
  • 21. class UserRepository constructor( private val webservice: Webservice, //network : retrofit private val userDao: UserDao //local data : room ) { suspend fun getUser(userId: String): User { val userExists = userDao.hasUser() //jika data local kosong, request network dan masukkan ke local if (!userExists) { val response = webservice.getUser(userId) userDao.save(response.body()) } return userDao.getUser(userId) } } Sample of Repository
  • 22. class UserProfileViewModel( userRepository: UserRepository ) : ViewModel() { private val _userId = MutableLiveData<String>() val userId: LiveData<String> = _userId fun setUserId(userId: String) { _userId.value = userId } val user = Transformations.switchMap(_userId) { id -> userRepository.getUser(id) } } Sample of ViewModel + LiveData
  • 23. class MainActivity : AppCompatActivity() { val viewModel: UserProfileViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... //initiate TextView viewModel.setUserId(userId) viewModel.user.observe(this, Observer<User> { //show data in TextView }) } } Sample of Good Code
  • 24. Best Practice ● Jangan jadikan activity, services, & broadcast sebagai sumber data. ● Buat batasan yang jelas antar modul. ● Expose sedikit mungkin data pada setiap modul. ● Pertimbangkan cara membuat setiap modul dapat diuji secara terpisah. ● Fokuslah pada inti aplikasi Anda supaya lebih bagus dari aplikasi lainnya. ● Sebisa mungkin simpan data yang relevan dan terbaru. ● Tetapkan satu sumber data sebagai single source of truth.