Android:自动选择调试/发布Maps v2 api密钥?

Kir*_*ela 43 android google-maps key android-manifest google-maps-android-api-2

我在我的项目中使用Google Maps v2 API.在Google Maps v2中,调试/发布API密钥定义于AndroidManifest.xml.我已经看到了链接,但在该映射键中是在xml布局文件中定义的AndroidManifest.xml.那么我可以为我的项目定义调试和释放密钥AndroidManifest.xml吗?

我想要这样的东西AndroidManifest.xml:

如果是调试模式:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/debug_map_api_key"/>
Run Code Online (Sandbox Code Playgroud)

如果发布模式:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/release_map_api_key"/>
Run Code Online (Sandbox Code Playgroud)

Kir*_*ela 66

我使用以下步骤解决了这个问题:

在Google Developer API控制台中

  1. 点击 Create New Android key...
  2. 在cmd.exe /终端中: keytool -list -v -keystore mystore.keystore
  3. 密码: android
  4. 现在输入SHA1 key;package namedebug并按Enter键
  5. 输入SHA1 key;package name发布
  6. 点击 Create

现在使用这个API密钥你的项目

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/common_map_api_key"/>
Run Code Online (Sandbox Code Playgroud)

  • 我不知道你可以为同一个包添加多个SHA1密钥.工作得很好. (2认同)

Zum*_*med 25

在最新的Android 5.0和Android 6.0中使用build.gradle文件的最佳方法之一(API 20,21,22,23)

那么你可以简单地使用它们而不会产生产品风味gradle.这是我们可以通过的另一个例子Gradle.您可以通过两个简单的步骤实现它.

  • 将自定义值添加到manifestplaceholdersbuild.gradle文件.

见下文

buildTypes {
    debug {
        manifestPlaceholders = [ mapApiKeyValue:"GHjaSyAjlyp3O831lgaonHMXsd-_DpQ3002x3S4"]
    }

    release {
        manifestPlaceholders = [ mapApiKeyValue:"AIzaSyAuMGDLr2HeuRed4JA0CrdYYdZRjeC3EA"]
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 编辑清单文件,如下所示.

我的清单文件的一部分

  <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="${mapApiKeyValue}" />
Run Code Online (Sandbox Code Playgroud)

此解决方案适用于最新的Android 5.0和Android 6.0(API 20,21,22,23)


在5/3/2018更新了Xamarin表单和Xamarin Native Apps

AssemblyInfo.cs在Android Project中打开 并添加以下代码

#if DEBUG
   [assembly: MetaData("com.google.android.maps.v2.API_KEY", Value = "DebugKey123123123")]
#else
   [assembly: MetaData("com.google.android.maps.v2.API_KEY", Value = "ReleaseKey123123123")]
#endif
Run Code Online (Sandbox Code Playgroud)

要检查AndroidManifest文件,请转到obj/Debug/android文件夹并打开清单文件并检查元信息,

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="DebugKey123123123" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.如果您想添加一些自定义键,而不是Google API,则确实非常有用. (2认同)

Rob*_*arl 15

对于需要维护单独密钥的组织,您可以将它们放在Android Studio的单独目录中.确保src您使用的子目录与flavor或buildType

使用Gradle构建项目:

To build each version of your app, the build system combines source code and resources from:

src/main/ - the main source directory (common to all variants)
src/<buildType>/ - the build type source directory
src/<flavorName>/ - the flavor source directory
Run Code Online (Sandbox Code Playgroud)

projectroot/yourapp/build.gradle:

buildTypes {
    debug {
        runProguard false
        debuggable true

    }
    release {
        runProguard true
        debuggable false
        ...
    }
Run Code Online (Sandbox Code Playgroud)

projectroot/yourapp/src/main/AndroidManifest.xml:

...
<application
    android:name=".MyApplication"
    android:theme="@style/Theme">
<!-- Don't put your key here -->
...
Run Code Online (Sandbox Code Playgroud)

projectroot/yourapp/src/debug/AndroidManifest.xml,完全限定应用程序的名称.

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="com.hipmunk.android.HipmunkApplication">
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="yourdebugkey" />
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

projectroot/yourapp/src/release/AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="com.hipmunk.android.HipmunkApplication">
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="release key" />
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)


Shi*_*ade 7

由于您使用的是gradle,因此可以执行以下操作:

的build.gradle

android {
  .. .. ...
    buildTypes {
       debug {
          resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
       }
       release {
           resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
       }
    }
  }
Run Code Online (Sandbox Code Playgroud)

并在您的AndroidManifest.xml中

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_maps_api_key"/>
Run Code Online (Sandbox Code Playgroud)

这样,您只有一个AndroidManifest.xml,并根据您的构建类型设置值.希望这可以帮助.