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

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

Recently uploaded (11)

PPTX
Beige Scrapbook Geography Presentation_20250804_212012_0000.pptx
PPTX
Materi_Saka_Wanabakti_Kemah_Pramuka_2025.pptx
PPTX
SUMBER SEJARAH.pptxhjhfy46y47gfyrutrjsyi4wueuywy
PDF
1public speaking._pengantar_public_speaking_rev.pdf
PPTX
LK 5.1 Tugas Membuat Mind Map.pptx kepada
PPT
kesiapan kelembagaan dan networking pondok pesantren
PPTX
Materi Seminar Minat dan Bakat Untuk Siswa.pptx
PPTX
PowerPoint Agama Islam Bab 4 Saling Menasihati dalam Islam..pptx
PPTX
TWIBBONize .pptx
PDF
DAY 1_Kebijakan Pembelajaran Coding dan Kecerdasan Artifisial.pptx (1).pdf
PPTX
BAB 1.pptxfgjtruuiiyfthrjkittyruriutjryuyiriti
Beige Scrapbook Geography Presentation_20250804_212012_0000.pptx
Materi_Saka_Wanabakti_Kemah_Pramuka_2025.pptx
SUMBER SEJARAH.pptxhjhfy46y47gfyrutrjsyi4wueuywy
1public speaking._pengantar_public_speaking_rev.pdf
LK 5.1 Tugas Membuat Mind Map.pptx kepada
kesiapan kelembagaan dan networking pondok pesantren
Materi Seminar Minat dan Bakat Untuk Siswa.pptx
PowerPoint Agama Islam Bab 4 Saling Menasihati dalam Islam..pptx
TWIBBONize .pptx
DAY 1_Kebijakan Pembelajaran Coding dan Kecerdasan Artifisial.pptx (1).pdf
BAB 1.pptxfgjtruuiiyfthrjkittyruriutjryuyiriti

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.