生成Google地图发布密钥

时间:2015-10-10 15:40:52

标签: java google-maps android-studio

所以我在我的应用程序中使用google maps api。我添加了活动并将api密钥放入google_maps_api.xml(调试),然后创建了一个不同的api密钥并将其放入/ release下的google_maps_api.xml中,我必须转到文件资源管理器才能找到。如果我通过android studio中的绿色播放按钮启动应用程序,地图加载就好了。但是当我在构建下生成apk时,地图不会加载。我相信这是因为api无法正常工作。我担心的一个问题是编辑google_maps_api(发布版)的唯一方法是在资源管理器中找到它。非常感谢所有帮助!

这是清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nick.mowen.receiptmanager" >

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:fullBackupContent="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <service android:name=".GeofenceTransitionsIntentService" />

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity" />
        </activity>
        <activity
            android:name=".SettingsActivity"
            android:label="@string/Settings"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        <activity
            android:name=".ViewCodeActivity"
            android:label="Receipt Code"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        <activity
            android:name=".GetHelp"
            android:label="@string/get_help_title"
            android:parentActivityName=".SettingsActivity" >
            <meta-data
                android:name="android.support.PARENT.ACTIVITY"
                android:value=".SettingsActivity" />
        </activity>
        <activity
            android:name=".CodeAdder"
            android:label="@string/title_activity_code_adder"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nick.mowen.receiptmanager.MainActivity" />
        </activity>
        <activity android:name=".SearchActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <!--
             The API key for Google Maps-based APIs is defined as a string resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/. 
        -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".LocationPicker"
            android:label="@string/title_activity_location_picker" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nick.mowen.receiptmanager.CodeAdder" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.nick.mowen.receiptmanager"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
    compile 'com.android.support:recyclerview-v7:23.0.1'
    compile 'com.google.android.gms:play-services-maps:8.1.0'
    compile 'com.google.android.gms:play-services:8.1.0'
}

2 个答案:

答案 0 :(得分:2)

您可以使用相同的Android API密钥进行调试和发布。

软件包名称可以相同,但由于您无法使用调试密钥库签署您的版本,证书指纹应该不同

使用keytool命令检查发布指纹是否正确:

keytool -list -v -keystore my_release_store.keystore

Multiple entries for the same Android API key

答案 1 :(得分:0)

如果您使用的是android studio,请转到“项目”视图。您会在 app&gt;&gt;下找到google_maps_api(发布) src&gt;&gt;发布&gt;&gt; res&gt;&gt;值

您需要将 signingConfigs 添加到 build.gradle(模块:应用)文件中。

这是我的文件包含的内容 -

android {
compileSdkVersion 21
buildToolsVersion '21.0.1'

defaultConfig {
    applicationId "com.example"
    minSdkVersion 16
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
signingConfigs {
    release {
        storeFile file('Path\\YourReleaseKey.jks')
        storePassword 'password'
        keyAlias 'YourAlias'
        keyPassword 'password'
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

此外,尝试使用多个设备。由于我的设备上有一些应用程序设置,我曾经遇到过一个问题。重置所有应用程序设置后,它工作正常。