Как избежать DEX 64K LIMIT, импортируя нужную библиотеку
У меня была эта проблема, где я переполняюПредел метода 64k в Dalvik при компиляции всей библиотеки, которую я использовал. У меня возникла эта проблема, когда я импортировал библиотеку поддержки, так как некоторые из них уже содержатся в других, в результате переполнение лимита.
Есть ли способ проверить, не используется ли библиотека в текущем проекте или уже импортирована через другие зависимости библиотеки?В настоящее время я исключаю тех, кого знаю наверняка, но кажется странным, что приходится делать это вручную.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:multidex:1.0.1'
compile "com.android.support:percent:${supportLibVersion}"
compile("com.android.support:design:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile("com.android.support:cardview-v7:${supportLibVersion}") {
exclude module: 'support-v4'
}
compile('com.github.nkzawa:socket.io-client:0.4.1') {
exclude group: 'org.json', module: 'json'
}
compile('com.astuetz:pagerslidingtabstrip:1.0.1') {
exclude module: 'support-v4'
}
//...
}
Решения на данный момент:Используйте плагин Gradle - Некоторое время назад мы написали чрезвычайно простой в использовании плагин Gradle, который перечисляет количество методов по пакетам вместе с общим количеством. Вы можете найти больше информации об этом здесь.www.methodscount.com Хотите знать, сколько методов конкретная библиотека добавит в ваше приложение? Просто введите оператор «compile» на этом веб-сайте, и он скажет вам, что это число методов, зависимости, размер JAR и размер DEX.Плагин для Android Studio - Этот отличный плагин показывает количество методов каждой зависимости прямо в Android Studio.Использование библиотеки поддержки MultiDex Если вы используете Android Studio, процесс очень прост. Если это не так, я настоятельно рекомендую выполнить миграцию, поскольку Google может вскоре отказаться от поддержки плагина Eclipse ADT и старой системы сборки на основе Ant.Шаг 1
Добавьте зависимость для библиотеки поддержки MultiDex в ваш build.gradle
dependencies {
...
compile 'com.android.support:multidex:'
...
}
Шаг 2
Включите мультидексинг, установив флаг multiDexEnabled в разделе buildType или productFlavor вашей конфигурации gradle.
defaultConfig {
...
multiDexEnabled true
...
}
Теперь в зависимости от вашего проекта у вас есть 3 варианта:
Если вы не создали свой собственный класс Application, просто объявитеandroid.support.multidex.MultiDexApplication
как класс вашего приложения вAndroidManifest.xml
....
android:name="android.support.multidex.MultiDexApplication"
...
Если у вас уже есть собственный класс Application, сделайте его расширеннымandroid.support.multidex.MultiDexApplication
вместоandroid.app.Application
Если ваш класс Application расширяет какой-либо другой класс, и вы не хотите или не можете его изменить, переопределите метод attachBaseContext (), как показано ниже:
public class MyApplication extends FooApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}