Unable to execute dex: Cannot merge new index 66570 into a non-jumbo instruction!
1. Proguard 사용 빌드
디버그에도 Proguard 옵션을 켜고, Obfuscating은 끄고 빌드해서 사용하면 실제 쓰이지 않는 코드가 삭제되기 때문에 Method ID 수를 줄일 수 있습니다. (Gradle 빌드를 사용하고 계시면 손쉽게 BuildType 에 proguard 옵션만 주시면 됩니다.)
(제가 생각하기에 가장 좋은 방식입니다.)
2. micro library 만들기
사용하고 계시는 library 중 method ID개수가 많은 library (이건 jar를 dex로 변환하고 MethodID 조회해서 비교해보셔야 합니다.) 의 모든 Method가 사용되지 않는다면, 해당 library 에서 사용하는 부분만 Keep 옵션주고 micro 버전 jar를 자체적으로 만들어서 사용하실 수 있습니다. Google+ 앱 오픈소스라이선스 보시면 guava-tiny 가 있는데 이처럼 본인에게 필요한 작은 library 를 만드실 수도 있습니다.
3. Custom Dex loading
위 댓글에서 나온것 처럼 sub-dex 를 build과정에 asset에 넣고 설치시 internal storage 에 저장한 뒤 loading 할 수도 있습니다. 하지만 분리하는 Module 에 대해 Interface를 작성해줘야 하기 때문에 사용이 불편합니다. (사용할 때는 Interface로 호출, 분리되는 Dex는 interface를 구현)
>> 아래와 차이.
. 2. 25.