如何在Android Studio中创建一个使用Google Maps Api v2的Android应用程序?

41
我一直在使用Android Studio尝试创建一个带有GoogleMap的应用程序,但遇到了很多问题。
以前我使用Eclipse作为IDE,按照以下指南(几乎)没有遇到任何问题:

https://developers.google.com/maps/documentation/android/start

我以前从未使用过Android Studio,对整个项目/模块范例感到困惑。

我一直无法成功配置Google Play服务SDK http://developer.android.com/google/play-services/setup.html

这是我遇到的一个奇怪错误之一:

Gradle: 
失败:任务“:MyMapApp:compileDebug”执行失败。
>编译失败;有关详细信息,请参阅编译器错误输出。
* 尝试: 运行带--stacktrace选项以获取堆栈跟踪。 运行带--info或--debug选项以获取更多日志输出。

1
你的构建目标是针对 Google APIs 吗? - nhaarman
你可以在http://stackoverflow.com/questions/16759364/multi-project-setup-with-gradle-for-android/17657713#17657713中看到我对类似问题的回答。希望这能帮到你! - JavierSP1209
我在这个演示项目中设置了Google地图。 - JJD
7个回答

55

最终我使用Android Studio成功运行了GoogleMapsAPIv2项目。

编辑:正如Xavier所提到的,这种方法仅适用于非Gradle构建的项目。而在本教程中使用的UI部分将被从AndroidStudio中排除。因此,如果您有自己使用Gradle构建系统的项目,则需要手动修改build.gradle配置文件,因为Android Studio的UI不会影响它。

编辑2:随着AndroidStudio v0.1.1版本的发布,负责模块依赖关系的UI部分已被删除,因此我们现在需要通过build.gradle文件手动更新依赖项。用于更改gradle依赖项的UI将在接下来的版本中发布。

编辑3:对于那些仍然尝试使用这种方法的人们,请注意它已经过时并且不再起作用了

以下是我的操作步骤:

1)我从Google Play Services示例中拿到maps项目,并将其复制到单独的目录中。这将是我们要尝试运行的MapsApiV2项目。在我的Mac上,它位于<sdk_location>/extras/google/google_play_services/samples,我把它放在了~/Work/stack/目录下。

2)将google-play-services_lib项目目录复制到同一位置(~/Work/stack),这样我的工作目录看起来像这样。顺便说一下,库项目位于<sdk_location>/extras/google/google_play_services/libproject: enter image description here

3)现在让我们打开Android Studio。在欢迎屏幕上,点击导入项目,并将我们的maps项目从~/Work/stack/maps导入。现在我们会看到很多关于GMS库未知引用的投诉:

enter image description here

4) 现在我们需要将Google Play服务添加为引用库。进入 View -> Open Module Settings.

5) 在 Modules选项卡中,点击+按钮并选择Import Module,导入你的GooglePlayServices lib。我没有更改向导中的任何内容,所以一直点击Next到最后:

enter image description here

6) 现在您需要引用此已导入的库。再次打开此屏幕(转到 View -> Module Settings)。确保已选择你的 maps 项目和 Dependency 选项卡。单击+以添加一个依赖项并选择Library。在那里选择导入的库:

enter image description here

7) 现在我们可以看到它没有抱怨 GMS 库,但仍在抱怨支持库:

enter image description here

8) 让我们来修复它。我的支持库位于 <sdk location>/extras/android/support/v13/android-support-v13.jar。因此,让我们尝试将其添加到我们的工作区域中。转到 View -> Open Module Settings 并选择Libraries 选项卡。选择 + -> Java 并选择支持库:

enter image description here

9) 现在它会询问您要将此 lib 添加到哪个项目中,请确保已选择您的 maps 项目:

enter image description here

10) 现在,代码应该可以无误地编译。只需确保在清单中针对正确的SDK版本进行目标设置。

玩得开心!


3
点赞了这个答案。但为什么每个人都使用暗黑主题?呸!那刺痛我的眼睛! - Thibault D.
我完全按照这些步骤进行操作,但仍然出现了与EsseTi类似的错误。 - jmgrosen
2
获取地图 API 密钥超出了范围。您可以参考 https://developers.google.com/maps/documentation/android/start#the_google_maps_api_key 获取更多信息,了解如何获取地图 API v2 密钥。 - Pavel Dudka
4
我想指出,问题特别涉及Gradle设置,而这个答案虽然对于纯IntelliJ项目是有效的,但不会在Gradle项目上起作用。解决方法是编辑build.gradle文件。在UI中编辑模块和模块依赖关系不会影响构建过程中使用的Gradle设置。实际上,下一个版本的Studio将禁用此UI。如果您不介意,请编辑答案并在顶部添加一条评论,说明这不适用于基于Gradle的项目。谢谢。 - Xavier Ducrohet
Studio仅在创建新项目或导入Gradle项目时使用Gradle进行构建,但您也可以打开常规的IntelliJ项目。在UI中更改模块/依赖项会影响Studio并“修复”Studio内部的问题,例如代码完成,但这对Gradle没有影响(如果使用)。我们将提供一个UI来直接更改build.gradle(然后将其重新导入到Studio中),但目前还不可用。 - Xavier Ducrohet
显示剩余6条评论

13

除了我创建了一个新项目以外,我遵循了相同的指示。在项目结构下,我删除了Android-Gradle facet并成功构建了项目。可选地,可以更新gradle构建文件并添加Android-Gradle facet到play服务库中。

注意:我更改了Google Play服务目录的名称。

build.gradle用于Google Play服务库。

apply plugin: 'android-library'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}

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

android {
    compileSdkVersion 17
    buildToolsVersion '17.0.0'

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aild.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

测试应用的build.gradle文件。

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

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

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 16
    }
}

2
这才是真正的答案!只有一个纠正:不需要编译文件('../lib-google-play-services/libs/google-play-services.jar');-)已经通过项目依赖间接添加了。 - Patrick Boos
2
同时,需要更新settings.gradle文件,加入库项目的include语句。 - Patrick Boos

9

我尝试过很多关于这个问题的教程,但最终找到了一个简单的解决方案,似乎可以在Android Studio和gradle上运行。

我刚刚在我的Mac上安装了Android Studio 0.2.3,并按照以下步骤在一个新的Hello World项目模板上查看地图片段:

1)在Android Studio的工具栏中点击SDK管理器按钮。

2)在“附加组件”下找到“Google Play服务”并下载它。

3)在src目录下的build.gradle文件中,将以下行添加到依赖项:

compile 'com.google.android.gms:play-services:3.1.36'

4)按照以下教程订购并安装您的API密钥:https://developers.google.com/maps/documentation/android/start#the_google_maps_api_key

5)将片段添加到您的布局xml中:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>

6) 现在您应该能够在您的设备上运行您的项目。


这是Android Studio最新版本(0.2.6)的推荐方法。 - Daniel
1
请注意,如果您要支持旧版本,则片段必须为com.google.android.gms.maps.SupportMapFragment - JJD
这对我来说在AS 0.3.1上有效,尽管在生成的APK运行之前,我必须退出并重新启动。 - Brian White

3
这是我制作的一个项目使用的配置,涉及到Android Studio 0.2gradle 0.5.+.Google Maps API V2。还使用了其他模块,如ActiobarSherlock和自定义的NumberPicker。我将它们保留在那里,以防有人需要。 项目结构:

enter image description here

1) 顶级目录 settings.gradle:
include ':SuperModule', ':libraries:actionbarsherlock', ':libraries:numberPicker'

2) TOP目录下的 build.gradle

task assemble {}

一些人可能会遇到 "assemble not found" 任务未找到的问题,因此需要添加这行代码!
3) SuperModule build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

dependencies {
    compile 'com.google.android.gms:play-services:3.1.36'
    compile 'com.android.support:gridlayout-v7:13.0.0'
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:numberPicker')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}

注意这里的依赖关系。它使用了ActionBarSherlock(ABS)和NumberPicker作为Android库。我还使用了Play服务(这就是为什么最小SDK必须是>=8),以及布局库(用于空间元素)。 此处未包含支持库,因为它已经包含在ABS库中!
Actionbar Sherlock build.gradle:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

NumberPicker的build.gradle没有显示,因为它与其他文件具有相同的逻辑。


2
我写了一篇文章,介绍了如何使用Location接口和Google Map API创建地图应用程序。在这个过程中,我遇到了许多问题,包括:应该包含哪些SDK、应该导入哪些库、在Android清单文件中应该设置什么以及如何更改Gradle文件等等。希望这能有所帮助。
原文链接:http://www.todroid.com/how-to-create-a-google-map-application-using-android-studio/

1
我曾经遇到过类似的问题,就是找不到com.google.android.gms.maps包(它一直说它不存在)。这是在我按照谷歌自己文档上的迁移教程正确导入了所有内容后出现的。http://developer.android.com/sdk/installing/migrate.html 无论如何,在导入所有内容后,我仍然有这个问题,并不确定如何设置构建路径(或非eclipse等效方法)。
我只需要按照下面你教程的一半,删除已在模块设置窗口中列出的google-play-services库,然后再添加即可。
希望这对其他人有用。

1
我也遇到类似的问题,我解决了导入Google Play服务.jar作为库,而不是像模块一样使用Google Play服务项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接