SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Modularization with
Dynamic Feature Module
(feat. App Bundle Tip)
2019.06.25
네이버앱 개발 이강
모듈화란?
네이버에는 현재 수많은 앱들이 존재합니다.
그리고 네이버는 올 해 20주년을 맞이했습니다.
App
모듈화.... 왜?
1. Scale
App
App
2. Maintainability
3. Build Times
4. App Size
• On-demand delivery : Out of Beta
• Conditional delivery : New Feature
Modularization with
Dynamic Feature Module
:app
apply plugin: ‘com.android.application’
:library 1
apply plugin: ‘com.android.library’
:library 2
apply plugin: ‘com.android.library’
:app
apply plugin: ‘com.android.application’
:DFM 1
apply plugin: 'com.android.dynamic-feature'
:DFM 2
apply plugin: 'com.android.dynamic-feature'
:app can’t depend
on :DFM1/2
:app
apply plugin: ‘com.android.application’
:DFM 1
onDemand=”false”
apply plugin: 'com.android.dynamic-feature'
:DFM 2
onDemand=”true”
apply plugin: 'com.android.dynamic-feature'
onDemand=“true”
onDemand=“true”
onDemand=“true”
80/20
:app
:DFM 1 :DFM 2
:app
:library :DFM 2:DFM 1
:app
:library :DFM 2:DFM 1
:base (core)
Navigation
:app
:library :DFM 2:DFM 1
:base
(core)
startActivity() val intent = Intent(this, DFM2Activity::class.java)
startActivity(intent)
val intent = Intent(Intent.ACTION_VIEW).setClassName(
PACKAGE_NAME,
FULL_CLASS_NAME)
startActivity(intent)
:app
:library :DFM 2:DFM 1
:base
(core)
fun <T> loadClassOrNull(className: String): Class<T>? {
return CLASS_MAP.getOrPut(className) {
try {
Class.forName(className)
} catch (e: ClassNotFoundException) {
return null
}
}.castOrNull()
Intent
return nullable!!
> Dynamic Feature (onDemand)
> Debug Build (doesn’t exist in the flavor)
• Jetpack Navigation 지원 예정?
Dependencies
:app
:search:video
:base
(core)
:news
SearchActivity
:search :video:news
:base (core)
DataSource
:search :video:news
:base (core)
DataSource
:search
:video
VideoDataSource
:news
NewsDataSource
:base (core)
DataSource
:search
Set<DataSource>
:video
VideoDataSource
:news
NewsDataSource
:base (core)
DataSource
:search
Set<DataSource>
:video
VideoDataSource
:news
NewsDataSource
// :base
Interface DataSourceProvider {
fun getDataSource(context: Context) : DataSource
}
// :news
class NewsDataSourceProvider : DataSourceProvider {
override fun getDataSource(context: Context) : DataSource {
// build dependencies
return dataSource
}
}
// :search
fun dataSource(activity: Activity) : Set<DataSource> {
val dataSources = mutableSetOf<DataSource>()
if (isFeatureInstalled(…)) {
val provider = Class.forName(“…NewsDataSourceProvider”)
.newInstance() as DataSourceProvider
val dataSource = provider.getDataSource(activity)
dataSources.add(dataSource)
}
}
:base (core)
DataSource
:search
Set<DataSource>
:video
VideoDataSource
:news
NewsDataSource
// :search
val manager: SplitInstallManager ..
manager.registerListener(listener)
val listener = SplitInstallStateUpdatedListener { state ->
if (SplitInstallSessionStatus.INSTALLED == state) {
// module was installed
val newDataSource = getDataSource( … )
registry.add(newDataSource)
}
}
onDemand=“true”로
아직 다운로드 전이라면?
• ServiceLoader
• Dagger
• 모듈화에 정답은?
• 그렇다면 모듈화는 정말로 해야하는가?
App Bundle 적용기
• App Bundle의 적용 자체는 간단하지만
이후 검증 및 배포 프로세스의 변경 필요
• Google Play Console upload track?
1) Production Track
2) Beta Track
3) Internal Test Track
• Google Play Console upload track?
1) Production Track
2) Beta Track
3) Internal Test Track
4) Internal Sharing
• Internal Sharing 참고사항
1. 설치하려는 단말의 Play Store 설정에서
‘내부 앱 공유’ enable
2. signing : Google Internal Key
Ø 기존 앱에 업데이트 설치 불가
• App Bundle 적용 후 이슈
1) Native Library Crash
• 재현 : App Bundle 설치 > apk sdcard로 이동 > Crash
위 옵션 설정 시 아래 warning 발생하지만 Google 측에 문의한 결과 경고 메시지는 곧 사라질 예정
- The option setting 'android.bundle.enableUncompressedNativeLibs=false' is experimental and unsupported.
• App Bundle 적용 후 이슈
2) Resources NotFoundException
- 특정 단말에서 반복적으로 발생 : 앱 진입 불가
- 백업/복구 어플 또는 apk 추출 어플 통해 수동으로 설치하는 경우에 발생
> base.apk 만 설치되고 resource, cpu 등의 split apk는 설치되지 않아 크래시 발생
감사합니다

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Java spring ppt
Java spring pptJava spring ppt
Java spring ppt
 
[Open southcode] ios testing with appium
[Open southcode] ios testing with appium[Open southcode] ios testing with appium
[Open southcode] ios testing with appium
 
Hybrid mobile app development
Hybrid mobile app developmentHybrid mobile app development
Hybrid mobile app development
 
TestNG - The Next Generation of Unit Testing
TestNG - The Next Generation of Unit TestingTestNG - The Next Generation of Unit Testing
TestNG - The Next Generation of Unit Testing
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Appium
AppiumAppium
Appium
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
Postman
PostmanPostman
Postman
 
Acrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVMAcrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVM
 
Angular Unit Testing
Angular Unit TestingAngular Unit Testing
Angular Unit Testing
 
Important React Hooks
Important React HooksImportant React Hooks
Important React Hooks
 
Angular Interview Questions & Answers
Angular Interview Questions & AnswersAngular Interview Questions & Answers
Angular Interview Questions & Answers
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appium
 
Appium: Automation for Mobile Apps
Appium: Automation for Mobile AppsAppium: Automation for Mobile Apps
Appium: Automation for Mobile Apps
 
Component testing with cypress
Component testing with cypressComponent testing with cypress
Component testing with cypress
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - Explained
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Automation Testing With Appium
Automation Testing With AppiumAutomation Testing With Appium
Automation Testing With Appium
 

Semelhante a Modularization with Dynamic Feature Module

장호상, 유재우 Program structure 130529
장호상, 유재우 Program structure 130529장호상, 유재우 Program structure 130529
장호상, 유재우 Program structure 130529
호상 장
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
Sang Don Kim
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminar
Sun-Jin Jang
 
장호상, 유재우 요구사항 분석 130501
장호상, 유재우 요구사항 분석 130501장호상, 유재우 요구사항 분석 130501
장호상, 유재우 요구사항 분석 130501
호상 장
 

Semelhante a Modularization with Dynamic Feature Module (20)

안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서
안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서
안드로이드 6.0 마시멜로 지원을 고민하는 개발자를 위한 안내서
 
구글앱엔진 스터디
구글앱엔진 스터디구글앱엔진 스터디
구글앱엔진 스터디
 
장호상, 유재우 Program structure 130529
장호상, 유재우 Program structure 130529장호상, 유재우 Program structure 130529
장호상, 유재우 Program structure 130529
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
Ionic project guide
Ionic project guideIonic project guide
Ionic project guide
 
모바일앱개발 교육자료
모바일앱개발 교육자료모바일앱개발 교육자료
모바일앱개발 교육자료
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
 
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
 
N02 app engineseminar
N02 app engineseminarN02 app engineseminar
N02 app engineseminar
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
 
장호상, 유재우 요구사항 분석 130501
장호상, 유재우 요구사항 분석 130501장호상, 유재우 요구사항 분석 130501
장호상, 유재우 요구사항 분석 130501
 
Dagger with multi modules
Dagger with multi modulesDagger with multi modules
Dagger with multi modules
 
한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 

Mais de NAVER Engineering

Mais de NAVER Engineering (20)

React vac pattern
React vac patternReact vac pattern
React vac pattern
 
디자인 시스템에 직방 ZUIX
디자인 시스템에 직방 ZUIX디자인 시스템에 직방 ZUIX
디자인 시스템에 직방 ZUIX
 
진화하는 디자인 시스템(걸음마 편)
진화하는 디자인 시스템(걸음마 편)진화하는 디자인 시스템(걸음마 편)
진화하는 디자인 시스템(걸음마 편)
 
서비스 운영을 위한 디자인시스템 프로젝트
서비스 운영을 위한 디자인시스템 프로젝트서비스 운영을 위한 디자인시스템 프로젝트
서비스 운영을 위한 디자인시스템 프로젝트
 
BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호
 
이번 생에 디자인 시스템은 처음이라
이번 생에 디자인 시스템은 처음이라이번 생에 디자인 시스템은 처음이라
이번 생에 디자인 시스템은 처음이라
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기
 
쏘카프레임 구축 배경과 과정
 쏘카프레임 구축 배경과 과정 쏘카프레임 구축 배경과 과정
쏘카프레임 구축 배경과 과정
 
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
 
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
 
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
 
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
 
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
 
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
 
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
 
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
 
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
 
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
 
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
 

Último

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Último (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 

Modularization with Dynamic Feature Module