Android Studio с сервисами Google Play

95

Я пытаюсь протестировать сервисы Google Play с новой Android Studio. У меня есть проект с зависимостью от google_play_services.jar. Но когда я пытаюсь перестроить проект, я получаю следующие ошибки:

Information:[TstGP3-TstGP3] Crunching PNG Files in source dir: C:\Users\ans\AndroidStudioProjects\TstGP3\TstGP3\src\main\res
Information:[TstGP3-TstGP3] To destination dir: C:\Users\ans\AndroidStudioProjects\TstGP3\build\classes\res-cache\TstGP3-TstGP3
Information:Compilation completed with 2 errors and 0 warnings in 2 sec
Information:2 errors
Information:0 warnings
C:\Users\ans\.AndroidStudioPreview\system\compiler\tstgp3.3f17bd41\.generated\Android_BuildConfig_Generator\TstGP3-TstGP3.74fc5b25\production\com\example\tstgp3\BuildConfig.java
    Error:Error:line (4)error: duplicate class: com.example.tstgp3.BuildConfig
C:\Users\ans\.AndroidStudioPreview\system\compiler\tstgp3.3f17bd41\.generated\aapt\TstGP3-TstGP3.74fc5b25\production\com\example\tstgp3\R.java
    Error:Error:line (10)error: duplicate class: com.example.tstgp3.R

Кажется, что у него есть два файла BuildConfig, а также два класса R. Как я могу решить проблему?

РЕДАКТИРОВАТЬ:

Я заметил, что компилятор компилирует два файла R.java: тот, который находится в папке моего проекта, и другой, который находится в папке% USERPROFILE% .AndroidStudioPreview Итак, я попытался исключить эту папку «Предварительный просмотр» в настройках компилятора и теперь он работает. Эта проблема возникает только после того, как я начал использовать классы Google Play Services в своем проекте. Буду признателен, если кто-нибудь сможет объяснить причину этой проблемы.

андроидтестер
источник
Кто угодно может помочь в том, что делает эта компиляция com.google.android.gms: play-services: 6.5.87, когда она добавлена ​​в раздел зависимостей в студии Android. Мы также можем добавить банку, но то, что делает строка выше, поскольку мы не добавляем банки.
Android Killer

Ответы:

243

Все эти ответы неверны, поскольку с выпуском плагина gradle v0.4.2 настройка сервисов Google Play под Android Studio проста. Вам не нужно ни импортировать банку, ни добавлять какую-либо библиотеку проектов, ни добавлять новый модуль в студию Android. Что вам нужно сделать, так это добавить правильные зависимости в файл build.gradle. Пожалуйста, взгляните на эти ссылки: Gradle plugin v0.4.2 update , New Build System и этот образец

Правильный способ сделать это состоит в следующем:

Прежде всего вам нужно запустить диспетчер sdk, загрузить и установить следующие файлы, расположенные в разделе «Дополнительно»: репозиторий поддержки Android , сервисы Google Play , репозиторий Google .

Перезапустите студию Android и откройте файл Gradle сборки. Вы должны изменить свой файл build.gradle, чтобы он выглядел следующим образом в зависимостях:

dependencies {
    compile 'com.google.android.gms:play-services:6.5.87' 
 }

И, наконец, синхронизируйте свой проект (кнопка слева от диспетчера AVD).

Начиная с версии 6.5 вы можете включать полную библиотеку (очень большую) или только те модули, которые вам нужны (лучший вариант). Т.е. если вам нужны только Google Maps и Analytics, вы можете заменить предыдущий пример следующим:

dependencies {  
    compile 'com.google.android.gms:play-services-base:6.5.87'    
    compile 'com.google.android.gms:play-services-maps:6.5.87'  
}

Вы можете найти полный список зависимостей здесь

Некоторые примечания на стороне:

  • Используйте последнюю версию библиотеки игровых сервисов. Если это старая версия, студия Android выделит ее. На сегодняшний день (5 февраля - 6.5.87), но вы можете проверить последнюю версию на Gradle. Пожалуйста
  • После крупного обновления Android Studio очистите и перестройте свой проект, следуя следующим инструкциям, предложенным в комментариях @ user123321.

    cd в папку вашего проекта
    ./gradlew clean
    ./gradlew build

Иманол
источник
привет Эсторнино. Я тоже видел это обновление, но мне было интересно, как Android Studio (по крайней мере, сама IDE) выбирает зависимости? вы заставили его работать только с настройками Gradle?
победитель Н.
да, у меня это сработало. IDE также может разрешать новые имена. Спасибо.
победитель Н.
Извините за задержку с ответом. Когда вы нажимаете кнопку синхронизации, ide автоматически добавляет новые зависимости. Именно система сборки управляет поведением ide, и не рекомендуется вносить изменения в проект в «старом» стиле идеи (я имею в виду изменение модулей и конфигурации проекта). Я рада, что это работает на вас.
Imanol
5
Убедитесь, что вы ./gradlew очищаете, а затем ./gradlew build до того, как android studio 2.x подберет зависимость. В противном случае вы получите ошибку
NoClassDef
2
На сегодняшний день последняя сборка, которую я получил, была 5.2.08
chrisbjr
114
  1. Перейдите в Файл -> Структура проекта.
  2. Выберите "Настройки проекта".
  3. Выберите вкладку "Зависимости".
  4. Нажмите «+» и выберите «1.Зависимости библиотеки».
  5. Искать: com.google.android.gms: play-services
  6. Выберите последнюю версию и нажмите «ОК».

Вуаля! Не надо драться с Gradle :)

Иво Стоянов
источник
5
Это сработало для меня, и это очень просто. Он уже знает номер последней версии play-services - вы просто выбираете ее из списка, и файл gradle изменяется для вас!
Ник Перкинс,
Могу ли я использовать тот же метод для импорта BaseGameUtils для таблицы лидеров?
eng.ahmed
Да, Ахмед. Таким образом вы можете импортировать любую библиотеку Android.
Иво Стоянов
Простые, элегантные решения. Спасибо @IvoStoyanov, это сэкономит время новичкам, таким как я.
Manikandan S
5

EDITED: этот парень действительно принес его домой и имеет небольшой хороший учебник http://instantiatorgratification.blogspot.com/2013/05/google-play-services-with-android-studio.html

одно примечание: я так много играл, что мне нужно было сделать, gradlew cleanчтобы он работал успешно

Если вы импортировали свой проект или работаете из приложения Sample Maps, расположенного в \ extras \ google \ google_play_services \ samples \ maps, ознакомьтесь с этим руководством.

https://stackoverflow.com/a/16598478/2414698

Если вы создаете новый проект с нуля, обратите внимание на комментарии Xav к тому же посту. Он описывает, что Android Studio использует другой компилятор и что вам нужно вручную изменить файл build.gradle. Я сделал это успешно. Я скопировал

  • google-play-services.jar
  • google-play-services.jar.properties

в мой каталог lib и добавил следующее в мой файл build.gradle

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/google-play-services.jar')
}

Кроме того, если это новый проект, ознакомьтесь с этим постом.

https://stackoverflow.com/a/16671865/2414698

упаковщик
источник
7
Статья, на которую вы ссылаетесь, устарела. Это решение не рекомендуется.
RevNoah 07
4

Большинство из этих ответов касаются только зависимостей времени компиляции, но вы найдете множество исключений NoClassDef во время выполнения. Это потому, что вам нужно больше, чем файл google-play-services.jar. Он ссылается на ресурсы, которые являются частью проекта библиотеки, и они не включены правильно, если у вас есть только jar.

Что лучше всего сработало для меня, так это сначала правильно настроить проект в eclipse. Структурируйте свой проект так, чтобы он включал и ваше приложение, и библиотеку, как описано здесь: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Multi-project-setup

Затем экспортируйте проект своего приложения из eclipse и импортируйте в Android Studio, как описано здесь: http://developer.android.com/sdk/installing/migrate.html . Обязательно экспортируйте проект своего приложения и проект библиотеки сервисов Google Play. При импорте он обнаружит проект библиотеки и импортирует его как модуль. Я просто принял все настройки по умолчанию в процессе импорта проекта.

Брэд Армстронг
источник
2
Спасибо, но я не хочу использовать eclipse!
androidtester
2

Интеграция сервисов Google Play в студию Android.

Шаг 1:

SDK manager->Tools Update this

1.Google play services
2.Android Support Repository

Шаг 2:

chance in build.gradle 
defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:4.0.+'
}

Шаг 3:

 android.manifest.xml
<uses-sdk
        android:minSdkVersion="8" />

Шаг 4:

Sync project file with grandle.
wait for few minute.

Шаг 5:

File->Project Structure find error with red bulb images,click on go to add dependencies select your app module.
Save

Пожалуйста, оставьте комментарий, если вам нужна помощь. Удачного кодирования.

Харшид
источник
2

Ни одно из приведенных выше решений не помогло мне. Не уверен, относится ли это к моей установке или новой версии.

Я использую Android Studio Beta 0.8.9, и я не получал com.google.android.gms: play-service в списке библиотек, следуя этой инструкции:

Перейдите в Файл -> Структура проекта -> Выберите Настройки проекта -> Выберите вкладку «Зависимости» Нажмите «+» -> 1. Зависимости библиотеки -> Выберите com.google.android.gms: play-services: +

Я уже сделал это:

Прежде всего, вам необходимо запустить диспетчер sdk, загрузить и установить следующие файлы, расположенные в разделе «Дополнительно»: репозиторий поддержки Android, сервисы Google Play, репозиторий Google.

Решением было добавить из SDK Manager «Сервисы Google Play для Froyo», а затем повторить первый шаг.

Не понял причину, но это сработало.

PS: Я только что заметил, что даже сейчас, когда я ищу play-services, этого не происходит, но когда я непосредственно прокручиваю и просматриваю список, он прямо там.

Selfx Aadhyant
источник
2

Следуйте этой статье -> http://developer.android.com/google/play-services/setup.html

Вы должны выбрать Использование Android Studio

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

Пример файла Gradle:

Примечание. Откройте файл build.gradle в каталоге модуля приложения.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "{applicationId}"
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.google.android.gms:play-services:6.1.+'
}

Вы можете найти последнюю версию сервисов Google Play здесь: https://developer.android.com/google/play-services/index.html

д.Данаилов
источник
1

У меня это работает после выполнения следующих действий:

  • Используйте google-play-services-lib в качестве модуля (обратите внимание на разницу между модулем и проектом), затем добавьте google-play-services.jar в каталог «libs» вашей модели.
  • После этого добавьте банку в свой путь сборки, создав библиотеку, или добавьте банку в другую библиотеку. Обычно у меня есть одна библиотека IDEA, в которую я добавляю все свои файлы /libs/*.jar.
  • Добавьте библиотеку в свой путь сборки модулей через Настройки модуля (F4).
  • Добавьте google-play-services-lib в качестве зависимости модуля к вашему проекту.
  • Готово!

Примечание: это тоже не дает мне исключений во время выполнения, это работает.

Йохан С
источник
Я получаю те же ошибки: R.java и BuildConfig.java дублируются
androidtester 03
У вас есть модуль в зависимости от компиляции?
Johan S
Да! Единственное решение - то, о котором я упоминал ранее (
исключая
0

Откройте файл build.gradle вашего проекта и добавьте строку ниже под модулем зависимостей.

dependencies {
    compile 'com.google.android.gms:play-services:7.0.0'
}

Ниже будут добавлены Google Analytics и Карты, если вы не хотите интегрировать полную библиотеку.

dependencies {
    compile 'com.google.android.gms:play-services-analytics:7.0.0'
    compile 'com.google.android.gms:play-services-maps:7.0.0'
}
Панкадж
источник
0

В моем случае google-play-services_lib интегрирован как модуль (внешние библиотеки) для карты Google и GCM в мой проект.

Теперь это время требует реализации API автозаполнения Google Places, но проблема в том, что код новый, а мои библиотеки старые, поэтому какой-то класс не найден:

следуя этим шагам ...

1> Обновите сервис Google Play в SDK Manager

2> выберите новый файл .jar службы Google Play ( Sdk / extras / google / google_play_services / libproject / google-play-services_lib / libs ) замените старым

добился успеха ... !!!

Дхрув Раваль
источник
-3

Я скопировал файлы play libs из google-play-services_lib в каталог libs моего проекта:

  • google-play-services.jar
  • google-play-services.jar.properties.

Затем выделите их, щелкните правой кнопкой мыши «Добавить как библиотеки».

пожалуйста, удали меня
источник
1
Спасибо за ответ, но у меня это не сработало - похоже на то, что я пробовал раньше.
androidtester
Этот совет противоречит другой информации, которую я читал в другом месте. Ответ, связанный с первым ответом, устарел, поскольку он использует этот метод.
RevNoah 07