【问题标题】:How can I create an Android application in Android Studio that uses the Google Maps Api v2?如何在 Android Studio 中创建使用 Google Maps Api v2 的 Android 应用程序?
【发布时间】:2013-05-16 20:19:21
【问题描述】:

我在 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

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

摇篮: FAILURE:构建失败并出现异常。 * 什么地方出了错: 任务“:MyMapApp:compileDebug”执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

【问题讨论】:

标签: android google-maps android-studio google-play-services


【解决方案1】:

最后我设法使用 Android Studio 运行 GoogleMapsAPIv2 项目。

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

EDIT2:随着AndroidStudio v0.1.1版本的发布,负责模块依赖的UI部分已经被淘汰,所以现在我们需要通过build.gradle文件手动更新依赖。用于更改 gradle 依赖项的 UI 将在下一个版本中发布

EDIT3:对于那些仍在尝试使用这种方法的人 - 请注意它已经过时并且不再起作用了

这是我所做的:

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

2)将google-play-services_lib项目目录复制到同一个地方(~/Work/stack),所以我的工作目录是这样的。顺便说一句,lib 项目位于<sdk_location>/extras/google/google_play_services/libproject

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

4) 现在我们需要添加 Google Play Service 作为参考库。去View -> Open Module Settings

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

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

7) 现在我们可以看到它不是在抱怨GMS 库,而是在抱怨支持库:

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

9) 现在它会询问您要将这个库添加到哪个项目,因此请确保您选择了 maps 项目:

10) 此时代码应该可以编译没有问题。只需确保您在 Manifest 中定位正确的 SDK 版本即可。

玩得开心

【讨论】:

  • 赞成答案。但是为什么每个人都使用黑暗主题?呸!这伤害了我的眼睛!
  • 我收到Gradle: package com.google.android.gms.maps does not exist 等。有人知道如何解决这个问题吗?我不想为此提出一个新问题。
  • 您是否按照步骤 6 中的说明将 GooglePlayServices 添加为参考库?
  • 获取地图 api 密钥超出范围。你可以参考developers.google.com/maps/documentation/android/…获取更多关于如何获取map api v2 key的信息
  • 我想指出,这个问题专门针对 Gradle 设置,而且这个答案虽然对纯 IntelliJ 项目有效,但对 Gradle 项目有效。解决方案是编辑 build.gradle。在 UI 中编辑模块和模块依赖项不会影响构建期间使用的 Gradle 设置。事实上,下一版 Studio 将禁用此 UI。如果您不介意,请编辑答案以在顶部添加评论,说明这不适用于基于 Gradle 的项目。谢谢。
【解决方案2】:

除了创建一个新项目外,我按照相同的说明进行操作。在项目结构下,我删除了 Android-Gradle 方面并能够成功构建。可以选择更新 gradle 构建文件并将 Android-Gradle 方面添加到播放服务库。

注意:我更改了 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
    }
}

【讨论】:

  • 这是真正的答案!只是一个更正:编译文件('../lib-google-play-services/libs/google-play-services.jar')不需要;-)已经通过项目依赖间接添加。
  • settings.gradle 也需要使用库项目的包含语句进行更新。
【解决方案3】:

我已经尝试过很多关于这方面的教程但都失败了,但最终找到了一个似乎适用于 Android Studio 和 gradle 的简单解决方案

我刚刚在我的 Mac 上安装了 Android Studio 0.2.3,这些是让我在全新的 hello world 项目模板上查看地图片段的步骤:

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

2) 在“Extras”下找到“Google play services”并下载。

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)的推荐方法。
  • 如果您支持旧版本,请注意片段必须是com.google.android.gms.maps.SupportMapFragment
  • 这对我使用 AS 0.3.1 有效,但我确实必须退出并重新启动,然后生成的 APK 才能运行。
【解决方案4】:

这是我创建的一个项目的配置,它使用Google Maps API V2,在Android Studio 0.2,与gradle 0.5.+. 还使用了其他模块,如ActiobarSherlock,以及自定义NumberPicker,我只是将它们留在以防有人需要。

项目结构:

1) TOP 目录 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
    }
}

注意这里的依赖关系。它的 actiobarSherlock(ABS) 和 NumberPicker,用作 android 库。我还使用 Play Services(这就是为什么 min 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 没有显示,因为它与其他逻辑相同..

【讨论】:

    【解决方案5】:

    我写了一篇文章,并逐步使用 Location 接口和 google map api 创建了一个地图应用程序。这将经历我在尝试启动和运行地图应用程序时遇到的许多怪癖,包括要包含哪些 SDK、要导入哪些库、在 android 清单中设置什么以及如何更改 gradle 文件。 希望这会有所帮助

    http://www.todroid.com/how-to-create-a-google-map-application-using-android-studio/

    【讨论】:

      【解决方案6】:

      我遇到了类似的问题,只是它找不到 com.google.android.gms.maps 包(它一直说它不存在)。这是在我按照 Google 自己的文档上的迁移教程正确导入所有内容(看似)之后:http://developer.android.com/sdk/installing/migrate.html

      无论如何,在导入所有内容后,我仍然遇到问题并且不确定如何设置构建路径(或非 Eclipse 等效项)。

      我只需要按照你下面一半的教程,删除已经在模块设置窗口中列出的 google-play-services 库,然后重新添加它。

      我希望这对其他人有用。

      【讨论】:

        【解决方案7】:

        我也有类似的问题,我解决了像库一样导入 google_play_services.jar 而不是像模块一样的谷歌播放服务项目。

        【讨论】:

          猜你喜欢
          • 2013-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-14
          • 2018-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多