10

我正在使用Google Map Android API v2android 应用程序。

它适用于不同设备上的未签名 apk 。但是,当我签署了 apk 并将我的应用程序上传到 Play 商店时,下载的应用程序会显示白屏而不是地图。

4

6 回答 6

13

您使用的是什么类型的密钥库?有两个键Debugrelease key。如果您使用调试密钥并在 android 市场中上传,则地图将显示为空白。签署 apk 时使用发布密钥。

释放密钥程序

步骤1:

例如,您的 apk 名称是 A,并且您正在为 A.apk 签名并创建密钥库,即 A.keystore 将在某个驱动器位置创建。让我们在 E 驱动器中考虑它。

第2步:

现在定位到C盘中的jdk(考虑windows并分配C盘)

C:\Program Files\Java\jdk1.7.0\bin>keytool -list -v -keystore E:\A.keystore -alias A

所以它会创建SHA-1指纹。

于 2013-08-23T06:02:18.480 回答
8

发生这种情况是因为签名 apk 和未签名 apk 的 mapApi 密钥不同。

您必须使用您的密钥库来生成 SHA1 密钥,您使用该密钥库来签署您的 apk。

不用担心,只需按照步骤操作即可。

打开终端和开火命令

keytool -list -alias -keystore -v

别名:abcd

创建日期:2013年3月15日

条目类型:PrivateKeyEntry

证书链长:1

证书[1]:

所有者:CN=abc, OU=abc, O=abc, L=abc, ST=abc, C=91

发行人:CN=abc, OU=abc, O=abc, L=abc, ST=abc, C=91

序列号:5142a21d

有效期从:2013 年 3 月 15 日星期五 09:52:53 IST 到:2063 年 3 月 3 日星期六 09:52:53 IST

证书指纹:

 MD5:  D3:CA:6D:F4:5E:B6:E1:48:F1:D6:DB:C4:67:F5:C3:B2

 SHA1: 03:D8:EF:05:04:CF:06:86:15:1A:F1:D3:B1:18:46:xx:xx:xx:xx:xx

 Signature algorithm name: SHA1withRSA

 Version: 3

从列表中获取 SHA1 密钥

打开您的 google api 控制台并生成新密钥并使用您的包名提供 SHA1 密钥

03:D8:EF:05:04:CF:06:86:15:1A:F1:D3:B1:18:46:F5:xx:xx:xx:xx;你的包名

将新的地图 api 密钥放入您的代码中。

于 2013-08-23T06:14:58.033 回答
1

我用于 SHA1 密钥的是在此处输入图像描述

调试密钥需要使用偏好 sha 1 指纹..

在此处输入图像描述

于 2015-04-13T09:33:14.897 回答
0

使用您用于创建发布的密钥为 android 地图创建发布密钥。它会起作用的。

于 2013-08-23T06:07:56.557 回答
0

只需检查 src/release 目录下的 google_maps_key,您应该将您自己的来自 google 控制台的密钥(您使用发布指纹 SHA1 获得的密钥)放在那里。

于 2015-11-26T20:57:46.430 回答
0

这一切对我没有帮助......

地图只有在我直接从 google play 上的应用程序获得 sha-1 证书后才能工作,发送到我的服务器,存储并设置在云 api 密钥中

地图在 GooglePlay 上运行良好!请享用!

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Base64;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;

void getCertSHA1(){
        PackageInfo info;
        try {
            info = getPackageManager().getPackageInfo("ru.ispyco.example", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sha1 = toHexString(md.digest());
                Log.i("sha-1: ",sha1);
                //send sha1 on your server HERE!
            }
        } catch (PackageManager.NameNotFoundException e1) {
            Log.i("name not found ", e1.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.i("no such an algorithm", e.toString());
        } catch (Exception e) {
            Log.i("exception ", e.toString());
        }
    }

    private String toHexString(byte[] block) {
        StringBuffer buf = new StringBuffer();
        int len = block.length;
        for (int i = 0; i < len; i++) {
            byte2hex(block[i], buf);
            if (i < len - 1) {
                buf.append(":");
            }
        }
        return buf.toString();
    }

    private void byte2hex(byte b, StringBuffer buf) {
        char[] hexChars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        int high = ((b & 0xf0) >> 4);
        int low = (b & 0x0f);
        buf.append(hexChars[high]);
        buf.append(hexChars[low]);
    }
于 2022-02-18T06:05:02.880 回答