Как избежать ограничения метода 65k при использовании сервисов Google Play
Если вы обнаружите, что пишете большое приложение для Android, которое зависит от множества разных библиотек (которые я бы рекомендовал вместо того, чтобы изобретать колесо), очень вероятно, что вы уже столкнулись с предел метода 65k исполняемого файла Dalvik classes.dex
. Кроме того, если вы зависите от больших библиотек, таких как SDK сервисов Google Play, которые уже содержали более 20 тыс. Методов в версии 5.0, вы вынуждены использовать трюки, такие как снятие пакетов или поддержка multidex, чтобы избежать ошибок при упаковке, С новой версией Android ART, которая общедоступна, так как файлы с несколькими файлами Android Lollipop легче обрабатывать, но в настоящее время разработчики все еще вынуждены делать метод считая.
Каков самый простой способ уменьшить количество методов вашего приложения при использовании сервисов Google Play?
Ответы
Ответ 1
Самым большим изменением для разработчиков, которые пришли с 6.5 выпуском сервисов Google Play, вероятно, было управление 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.
Ответ 2
Для тех, кто не использует Android Studio w/gradle
или не хочет реализовать ProGuard
для вашего проекта.
Можно избежать 65k при использовании сервисов google-play
сохраняя некоторые пакеты, которые вы действительно хотите использовать, используя jarjar. Например, в моем проекте я хочу реализовать только карту google и местоположение google. Я наклоняю свой google-play-services.jar, как это.
сохранить 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 process services.rules google-play-services.jar google-lean.jar
Чтобы он получил новый .jar, размер был значительно уменьшен (метод тоже)
использовать его instaed из google-play-services.jar и dex через 56k.
Здесь есть .jar, который был худым уже как упоминалось выше.
Ответ 3
Я знаю, что этот вопрос старый, но для тех из вас, кто сталкивается с этой проблемой во время работы над eclipse и не может использовать приведенный выше ответ
выполните следующие действия.
если вы не хотите загружать студию Android для получения проектов lib
вы можете скачать lib файлы здесь
https://www.dropbox.com/s/1pf73czcn7pyqgi/com.google.android.gms.rar?dl=0
и перейдите к шагу 4
1 - прежде всего вам нужна студия Android для загрузки ваших зависимостей
вы можете скачать его здесь
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
стыковые услуги базы
плей-сервис-карты
щелкните правой кнопкой мыши по ним, чтобы получить их путь
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