我正在使用Google Map Android API v2
android 应用程序。
它适用于不同设备上的未签名 apk 。但是,当我签署了 apk 并将我的应用程序上传到 Play 商店时,下载的应用程序会显示白屏而不是地图。
我正在使用Google Map Android API v2
android 应用程序。
它适用于不同设备上的未签名 apk 。但是,当我签署了 apk 并将我的应用程序上传到 Play 商店时,下载的应用程序会显示白屏而不是地图。
您使用的是什么类型的密钥库?有两个键。Debug
和release 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指纹。
发生这种情况是因为签名 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 密钥放入您的代码中。
我用于 SHA1 密钥的是
调试密钥需要使用偏好 sha 1 指纹..
使用您用于创建发布的密钥为 android 地图创建发布密钥。它会起作用的。
只需检查 src/release 目录下的 google_maps_key,您应该将您自己的来自 google 控制台的密钥(您使用发布指纹 SHA1 获得的密钥)放在那里。
这一切对我没有帮助......
地图只有在我直接从 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]);
}