带有Google Play服务的Android Studio


95

我正在尝试使用新的Android Studio测试Google Play服务。我有一个依赖于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文件夹中,因此,我尝试在编译器设置中排除此“ Preview”文件夹现在它正在工作。仅在我开始在项目中使用Google Play服务类之后,才会出现此问题。如果有人可以解释此问题的原因,我将不胜感激。


在添加到android studio中的“依赖项”部分时,任何人都可以帮助此编译com.google.android.gms:play-services:6.5.87所做的工作。我们也可以添加jar,但是由于我们没有添加jar,因此上述行的功能。
Android杀手

Answers:


243

所有这些答案都是错误的,因为gradle插件v0.4.2的发布在android studio下直接设置了Google Play服务。您无需导入任何jar或添加任何项目库,也无需在android studio下添加任何新模块。您要做的是将正确的依赖项添加到build.gradle文件中。请查看以下链接:Gradle插件v0.4.2更新新建系统以及此示例

正确的方式来做到这一点如下:

首先,您必须启动sdk管理器并下载并安装位于“ extras”下的以下文件:Android支持存储库Google play服务Google存储库

重新启动android studio并打开build 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 studio会突出显示它。截至今天(2月5日为6.5.87),但您可以在Gradle请查看最新版本。
  • 在对Android Studio进行重大更新后,按照@ user123321的注释中的建议按照以下说明清理重建项目

    cd到您的项目文件夹
    ./gradlew clean
    ./gradlew build


嗨Estornino。我也看到了此更新,但我想知道Android Studio(至少是IDE本身)如何获取依赖关系?您是否仅使用Gradle设置就可以使用它?
胜利者。

是的,它对我有用。IDE也可以解析新名称。谢谢。
胜利者。

这么晚才回复很抱歉。当您按下同步按钮时,ide将自动添加新的依赖项。正是由构建系统来控制ide行为,并且不鼓励以“旧的”思想风格对项目进行更改(我的意思是更改模块和项目配置)。我很高兴它为您工作。
Imanol

5
确保您先将./gradlew清理干净,然后再进行./gradlew编译,然后android studio 2.x才能获取依赖关系。否则,您会收到NoClassDef错误
2013年

2
截至今天,我得到的最新版本是5.2.08
chrisbjr 2014年

114
  1. 转到文件->项目结构
  2. 选择“项目设置”
  3. 选择“依赖项”标签
  4. 点击“ +”,然后选择“ 1.Library Dependencies”
  5. 搜索:com.google.android.gms:play-services
  6. 选择最新版本,然后单击“确定”

瞧!无需与Gradle战斗:)


5
这对我有用,非常容易。它已经知道最新的播放服务版本号-您只需从列表中选择它,然后即可为您修改gradle文件!
Nick Perkins 2014年

我可以使用相同的方法为排行榜导入BaseGameUtils吗?
eng.ahmed 2015年

是的,艾哈迈德 这样,您可以导入任何Android库。
伊沃·斯托亚诺夫

简单,优雅的解决方案。谢谢@IvoStoyanov,它将节省很多像我一样的初学者的时间。
Manikandan S

5

编辑:这个家伙真的带回家,并有一个很好的小教程 http://instantiatorgratification.blogspot.com/2013/05/google-play-services-with-android-studio.html

旁注:我玩得太多了,我需要做一次gradlew clean才能使其成功运行

如果您已导入项目或正在\ extras \ google \ google_play_services \ samples \ maps中的Sample 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

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
谢谢,但是我不想用日食!
androidtester

2

Android Studio中的Google Play服务集成。

第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.+'
}

第三步:

 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管理器并下载并安装位于“ extras”下的以下文件:Android支持存储库,Google Play服务,Google存储库。

解决的方法是从SDK Manager中添加“ Froyo的Google Play服务”,然后重复第一步。

不能正确理解原因,但是可以正常工作。

PS:我刚刚观察到,即使是现在,当我搜索播放服务时,也不会出现这种情况,但是当我直接滚动并浏览列表时,它就在那里。


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”目录中。
  • 之后,通过创建一个库将jar添加到您的构建路径中,或将jar添加到另一个库中。我通常只有一个IDEA库,将所有/libs/*.jar文件添加到其中。
  • 通过“模块设置”(F4)将库添加到模块的构建路径。
  • 将google-play-services-lib作为模块依赖项添加到您的项目中。
  • 做完了!

注意:这也不会给我运行时异常,它可以工作。


我得到了同样的错误:R.java和BuildConfig.java被复制了
androidtester

您是否将模块作为编译依赖项?
Johan S

是! 唯一的解决方案是我之前提到的解决方案(不包括Preview文件夹)
androidtester 2013年

0

打开您的项目build.gradle文件,然后在依赖模块下添加以下行。

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

如果您不想集成完整的库,则将在下面添加Google Analytics(分析)Google Maps

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 Map和GCM的模块(外部库)。

现在,这些时间需要实现Google Places Autocomplete API,但问题是代码是新的,而我的库是旧的,所以找不到某些类:

遵循以下步骤...

1>将Google Play服务更新到SDK Manager

2>选择新的Google Play服务.jar文件(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 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.