[android] Lazy loading dex files |
https://medium.com/@Macarse/lazy-loading-dex-files-d41f6f37df0e
-
65K method limit 을 넘어서면 multi dex 가 필요하다.
-
LOS 이전에서 MultiDex 를 사용하면 startup time 에 delay 가 있었다.
-
MultiDex lib source code 를 보면, 거기서 하는 일은. classloader 를 이용하여 추가 dex file 를 app 시작 시 로드하도록 프로그래밍 되어 있다.
왜 app 시작시 로드를 할까? 예를 들어 payment 에 관련된 lib 이 있다면 이런 녀석들은 사용되지 않을 수도 있는데.. 사용해도 나중에 로드해도 될텐데 말이다.
-
lazy load 를 하고 싶다면 우선 lazy load 하고 싶은 jar 을 pre-dex 하는 것이 중요하다.
이것은 dx tool 을 통해서 가능하며 /adt-bundle-mac-x86_64/sdk/build-tools/22.0.1/dx 느낌의 위치에 위치해 있다.
dx --dex --output=/path/to/the/library.dex /path/to/the/library.jar
dex file 을 얻은 후에 assets folder 에 넣는다.
그리고 code 에 dependency 로 추가하기 위해서 provided 로 mark 를 한다.
dependencies {
provided 'com.squareup.picasso:picasso:2.5.2'
}
provided 로 명시해주면 해당 dependency 는 final dex 에서 제거된다.
-
predexed 된 녀석을 로딩하려면 assets folder 에서 app cache dir 로 옮긴 후, installSecondaryDexes() 를 호출해주면 된다.
-
resource 가 있는 경우에는 jar 가 아닌 aars 가 되기 때문에 이 방법을 사용할 수 없다.
그리고 predexed 된 녀석을 상속하거나 구현한 경우에는 proguard 를 적용할 수 없다.
필자는 모든 device 에서 test 한 것도 아니고, 1개의 dependency 만 테스트 한 것이기 때문에 production 에서 사용하려면 충분한 테스트가 필요하다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] browser 에서 link 클릭했을 때 app selection 없이 내 앱으로 연결하기 (app link) (2) | 2019.02.01 |
---|---|
[android] Doze 모드와 GCM high priority 조합 중 주의해야 할 것 (0) | 2019.01.31 |
[android] "Memory leak" detect library (0) | 2019.01.29 |
[android] Google Play Service: Nearby Connections API (0) | 2019.01.28 |
[android] background work(AlarmManager) 수행에 대한 이야기 (0) | 2019.01.27 |
댓글