Как обойти ограничение в 65 КБ при использовании Сервисов Google Play
Если вы обнаружите, что пишете большое приложение для Android, которое зависит от множества разных библиотек (что я бы порекомендовал вместо изобретения колеса), вполне вероятно, что вы уже столкнулись с лимитом метода в 65 КБ исполняемого файла Dalvik. classes.dex
, Кроме того, если вы зависите от больших библиотек, таких как SDK Google Play Services, который уже содержал более 20 000 методов в версии 5.0, вы вынуждены использовать такие приемы, как разбор пакетов или поддержка мультидекса, чтобы избежать ошибок при упаковке. С новым Android-приложением ART времени выполнения, которое общедоступно с Android Lollipop, легче обрабатывать несколько файлов dex, но в настоящее время разработчики все еще вынуждены делать подсчет методов.
Какой самый простой способ уменьшить количество методов вашего приложения при использовании Google Play Services?
3 ответа
Самым большим изменением для разработчиков, появившимся в версии 6.5 Google Services, было, вероятно, управление гранулярными зависимостями. Google удалось разделить свою библиотеку, чтобы позволить разработчикам зависеть только от определенных компонентов, которые им действительно нужны для их приложений.
Начиная с версии 6.5, разработчики больше не обязаны внедрять полную библиотеку Google Play Services в свое приложение, но могут выборочно зависеть от таких компонентов:
compile 'com.google.android.gms:play-services-fitness:6.5.+'
compile 'com.google.android.gms:play-services-wearable:6.5.+'
compile 'com.gogole.android.gms:play-services-maps:6.5.+'
...
Если вы хотите скомпилировать полную библиотеку в свое приложение, вы все равно можете сделать это:
compile 'com.google.android.gms:play-services:6.5.+'
Полный список доступных пакетов можно найти на сайте разработчиков Android.
Для тех, кто не использует Android Studio w/gradle
или не хотите реализовывать ProGuard
вам проект.
Можно избежать 65 тыс. При использовании google-play-services, сохранив некоторые пакеты, которые вы действительно хотите использовать, используя jarjar. Например, в моем проекте я хочу реализовать только карту Google и местоположение Google, я склоняю свой google-play-services.jar следующим образом.
Скачать jarjar ЗДЕСЬ
Создайте новый файл с именем 'services.rules'
отредактируйте его следующим образом
держать com.google.android.gms.maps.*
сохранить com.google.android.gms.location.*
Скопируйте ваш оригинальный google-play-services.jar / jarjar-1.4.jar / services.rules в ту же папку
запустите командную строку и введите..
java -jar jarjar-1.4.jar процесс services.rules google-play-services.jar google-lean.jar
Вот и все, вы получите новый.jar, размер которого был значительно уменьшен (метод тоже)
используйте его вместо google-play-services.jar и dex более 56k исчезнет.
Вот.jar, который был уже худой, как упомянуто выше.
Я знаю, что этот вопрос старый, но для тех из вас, кто сталкивается с этой проблемой, работая над затмением, и не может использовать вышеуказанный ответ
пожалуйста, следуйте инструкциям
если вы не хотите загружать android studio для получения проектов lib, вы можете скачать файлы lib здесь: https://www.dropbox.com/s/1pf73czcn7pyqgi/com.google.android.gms.rar?dl=0 и перейти к шагу 4
1 - во-первых, вам все еще нужна Android Studio, чтобы загрузить свои зависимости, вы можете скачать ее здесь
https://developer.android.com/sdk/index.html
2 - затем в вашем build.gradle внутри вашего приложения добавьте следующие строки
dependencies {
compile 'com.google.android.gms:play-services-maps:7.5.0'
//map , gcm or any specific api for a hole list visit the below link
//https://developers.google.com/android/guides/setup
}
а затем нажмите синхронизировать проект с файлом Gradle
после этого вы попадете в lib проекты
play-services-base play-services-maps
щелкните правой кнопкой мыши на них, чтобы получить их путь
4 - создать проект в eclipse, удалить файлы генерации в папке src, папке res и манифесте
5- скопируйте res и манифест из базы play-services в ваш проект
6 - скопируйте файл из play-services-base/jars в папку libs вашего проекта, обычно называемую classes.jar (переименуйте его в любое другое имя, чтобы оно не конфликтовало с другим проектом)
7 - добавьте этот jar-файл, чтобы построить пути, затем щелкните правой кнопкой мыши на project / properties / java build path / order и на вкладке экспорта проверьте добавленный jar
8 - щелкните правой кнопкой мыши на проекте / свойства / Android / проверить, является ли библиотека
9- сделать те же шаги для play-services-maps
10 - теперь вы попали в проекты lib, один называется googleBase, а другой - googleMaps (или любое другое имя)
11 - добавить их в свой проект как библиотеки
Теперь добавьте следующие строки в ваш манифест
<!-- Include required permissions for Google Maps API to run-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="" />
для полного учебника с изображениями, пожалуйста, обратитесь к ссылке ниже http://androidninja.quora.com/Prevent-65-K-Methods-Count-When-Using-Google-Lib-on-Android-with-eclipse-adt