Как избежать ограничения на использование 65k при использовании сервисов Google Play

Если вы обнаружите, что пишете большое приложение для Android, которое зависит от множества разных библиотек (которое я бы рекомендовал вместо того, чтобы изобретать колесо), вполне вероятно, что вы уже столкнулись с пределом метода 65k для исполняемого файла Dalvik classes.dex . Кроме того, если вы зависите от больших библиотек, таких как SDK сервисов Google Play, которые уже содержат более 20 тыс. Методов в версии 5.0, вы вынуждены использовать трюки, такие как снятие пакетов или поддержку нескольких приложений, чтобы избежать ошибок при упаковке. С новой версией программного обеспечения Android, которая является общедоступной с тех пор, как файлы Dex с Lollipop для Android легче обрабатывать, но в настоящее время разработчики все еще вынуждены делать подсчет методов.

Каков самый простой способ уменьшить количество методов вашего приложения при использовании сервисов Google Play?

Solutions Collecting From Web of "Как избежать ограничения на использование 65k при использовании сервисов Google Play"

Самым большим изменением для разработчиков, которые пришли с выпуском сервисов Google Play 6.5, было, вероятно, управление Granular Dependency Management . 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 для вас.

При использовании сервисов google-play можно избежать 65k, сохранив некоторые пакеты, которые вы действительно хотите использовать, используя jarjar. Например, в моем проекте я хочу реализовать только карту google и местоположение google. Я склоняю свой google-play-services.jar следующим образом.

  1. Скачать jarjar ЗДЕСЬ

  2. Создайте новый файл-вызов 'services.rules'

  3. Отредактируйте его, как следует

Сохраните com.google.android.gms.maps. *

Сохраните com.google.android.gms.location. *

  1. Скопируйте исходный файл google-play-services.jar / jarjar-1.4.jar / services.rules в ту же папку

  2. Введите командную строку и введите ..

Java -jar jarjar-1.4.jar process services.rules google-play-services.jar google-lean.jar

Это значит, что вы получите новый .jar, который уменьшил размер (метод также)

Использовать его instaed из google-play-services.jar и dex через 56k.

Здесь .jar, который был худым уже как упоминалось выше.

Я знаю, что этот вопрос старый, но для тех из вас, кто сталкивается с этой проблемой во время работы над затмением и не может использовать вышеупомянутый ответ

Следуйте инструкциям

Если вы не хотите загружать андроид-студию, чтобы получить проекты lib, вы можете скачать lib-файлы здесь https://www.dropbox.com/s/1pf73czcn7pyqgi/com.google.android.gms.rar?dl=0 и Перейдите к шагу 4

1 – прежде всего вам по-прежнему нужна андроидная студия для загрузки ваших зависимостей, которую вы можете скачать здесь.

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 } 

А затем удалите проект синхронизации с помощью файла градиента

После этого вы попадете в lib-проекты

Play-services-base play-services-maps

Щелкните правой кнопкой мыши на них, чтобы получить их путь

4 – создать проект внутри eclipse, удалить файлы генерации в папке src, папке res и манифесте

5- копия res и манифест из play-services-base в ваш проект

6 – копируйте файл внутри play-services-base / jars в папку libs вашего проекта, обычно называемую classes.jar (пожалуйста, переименуйте его в любое другое имя, чтобы оно не противоречило с другим проектом)

7 – добавьте эту банку для создания путей, затем щелкните правой кнопкой мыши на проекте / свойствах / пути / порядке сборки java и на вкладке экспорта проверьте добавленную банку

8 – щелкните правой кнопкой мыши по проекту / свойствам / android / check – lib

9 – выполните те же действия для игровых сервисов-карт

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