android gms большое количество методов. Как этого избежать?

#java #android #methods #dependencies #google-play-services

#java #Android #методы #зависимости #google-play-сервисы

Вопрос:

У меня, как и у многих разработчиков, есть проблемы с печально известным ограничением методов Android 65000. Я уже перенастраиваю свое приложение, но мне бы очень хотелось как-то облегчить его.

Это график методов моего приложения (взятый с помощью плагина dexcount: https://github.com/KeepSafe/dexcount-gradle-plugin ).

введите описание изображения здесь

Как вы можете видеть, большинство методов поступают из пакета com.google.android.gms. Это список зависимостей из файла build.gradle:

 dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    compile project(':libs:cip-library:cip-library')
    compile project(':libs:android-times-square')
    compile files('../libs/mobile.connect-android-1.7.6.jar')
    compile files('../libs/dtapl-2.1.1.jar')
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
    compile 'com.nhaarman.listviewanimations:lib-core:3.1.0@aar'
    compile 'com.nhaarman.listviewanimations:lib-manipulation:3.1.0@aar'
    compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0@aar'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.google.code.gson:gson:2.4'
    compile 'de.greenrobot:greendao:2.0.0'
    compile 'com.pnikosis:materialish-progress:1.5'
    compile 'org.adw.library:discrete-seekbar:1.0.0'
    compile 'com.android.support:design:24.2.1'
    compile 'net.fredericosilva:showTipsView:1.0.4'
    compile 'com.google.maps.android:android-maps-utils:0.4.4'
    compile 'com.robohorse.gpversionchecker:gpversionchecker:1.0.8'
    compile 'net.danlew:android.joda:2.9.4.1'
    compile 'com.android.support:support-annotations:24.2.1'
    compile('com.crashlytics.sdk.android:crashlytics:2.6.2@aar') {
        transitive = true;
    }
    compile('com.mikepenz:aboutlibraries:5.7.1@aar') {
        transitive = true
    }
}
  

Теперь я знаю, что этих зависимостей не мало, но я не понимаю, какая из них — и как — вызывает зависимость от пакетов, таких как com.google.android.gms.internal.games, в то время как мое приложение не является игрой, com.google.android.gms.internal.cast или com.google.android.gms.internal.fitness. И — самое главное — как я мог когда-либо избавиться от этих зависимостей?

Большое вам спасибо, Марко

Комментарии:

1. Запустите отчет о зависимостях Gradle , чтобы определить, откуда берутся ваши неожиданные зависимости.

Ответ №1:

Чтобы понять, откуда берутся определенные зависимости, запустите задачу dependencies Gradle в модуле вашего приложения. Предположим, вызывается модуль вашего приложения app , тогда команда будет выглядеть так:

 ./gradlew -q :app:dependencies
  

Выходные данные должны содержать все транзитивные зависимости, и должно быть легко увидеть, какие библиотеки перетаскивают материал, от которого вы хотите избавиться.

Комментарии:

1. Спасибо, Егор, это очень помогло!