高德API接入安卓相关问题说明
我们都在怀念过去,失去后我们才懂得珍惜,有些人或事早已经远去,可是还是会想起曾经拥有的岁月,会是一种喜悦,会是一种遗憾……
目前Android开发已经普遍使用Android Studio,开放平台相关的产品都需要使用KEY,生成KEY需要的签名文件的SHA1和app包名,具体的申请步骤官网有详细说明,这里不再赘述。但是现在还有好多开发者按照步骤申请key之后,打包之后仍然会出现鉴权失败,主要原因是签名文件的SHA1和申请key的签名文件不一致造成的,这里就主要介绍一下Android Studio配置签名文件和需要注意问题。
配置签名文件
方法一——使用Android Studio生成
1.打开 Android Studio,点击菜单栏的 Build 选项,然后选择 Generate Signed Bundle/APK。
2.在弹出的窗口中,选择 APK,然后点击 Next 继续。
3.点击 Create new… 按钮创建一个新的密钥库文件(Keystore File)。
4.在弹出的窗口中,选择一个存储位置和文件名,然后设置一个密码用于保护密钥库文件。
5.填写密钥库的详细信息,包括别名(Alias)、密码、有效期等。
6. 查看SHA1签名
生成keystore文件后,您可以使用以下命令获取SHA1签名:
keytool -list -v -keystore [your_keystore_name].keystore -alias [your_alias_name]
示例:
keytool -list -v -keystore my-release-key.keystore -alias my-key-alias
运行该命令后,您将看到类似以下输出:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: my-key-alias
Creation date: [date]
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code]
Issuer: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code]
Serial number: [serial number]
Valid from: [start date] until: [end date]
Certificate fingerprints:
MD5: [your MD5 fingerprint]
SHA1: [your SHA1 fingerprint]
SHA256: [your SHA256 fingerprint]
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
在输出中找到SHA1
指纹,并将其用于高德地图API令牌配置。
通过以上步骤,您可以生成签名文件并获取SHA1签名,用于配置高德地图API令牌,确保应用的正确发布和使用。
方法二——命令生成
1. 生成签名文件(keystore)
使用keytool
命令生成签名文件。keytool
是JDK自带的工具,用于生成和管理密钥对及证书。
执行以下命令生成签名文件:
keytool -genkey -v -keystore [your_keystore_name].keystore -alias [your_alias_name] -keyalg RSA -keysize 2048 -validity 10000
示例:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
在运行该命令时,您将被提示输入以下信息:
- Keystore密码: 为您的keystore设置一个密码。
- 姓名与姓氏: 输入您的全名。
- 组织单位名称: 输入您的组织单位名称,如部门或团队。
- 组织名称: 输入您的公司或组织的名称。
- 城市或地区名称: 输入您的城市或地区名称。
- 省/市/自治区名称: 输入您的省份或州的名称。
- 国家代码: 输入您的国家代码,如“CN”代表中国。
- 确认信息: 确认输入的信息是否正确。
- 密钥密码: 为您的密钥设置一个密码。如果与keystore密码相同,可以直接按回车。
完成这些步骤后,您的keystore文件将被生成。
2. 获取SHA1签名
生成keystore文件后,您可以使用以下命令获取SHA1签名:
keytool -list -v -keystore [your_keystore_name].keystore -alias [your_alias_name]
示例:
keytool -list -v -keystore my-release-key.keystore -alias my-key-alias
运行该命令后,您将看到类似以下输出:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: my-key-alias
Creation date: [date]
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code]
Issuer: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code]
Serial number: [serial number]
Valid from: [start date] until: [end date]
Certificate fingerprints:
MD5: [your MD5 fingerprint]
SHA1: [your SHA1 fingerprint]
SHA256: [your SHA256 fingerprint]
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
在输出中找到SHA1
指纹,并将其用于高德地图API令牌配置。
通过以上步骤,您可以生成签名文件并获取SHA1签名,用于配置高德地图API令牌,确保应用的正确发布和使用。
build.gradle配置签名文件
在Android应用开发中,生成的签名文件(keystore)需要在Gradle构建文件中配置,以便在编译和打包应用时进行签名。以下是如何在build.gradle
文件中配置签名文件的详细介绍:
配置签名文件(keystore)
1. 创建签名文件(keystore)
首先,确保您已经按照之前介绍的步骤生成了签名文件(keystore),并获取了相关信息(如keystore文件路径、storePassword、keyPassword和keyAlias)。
2. 配置build.gradle
文件
在项目的build.gradle
文件中,添加签名配置。通常,这些配置会放在android
块中的signingConfigs
块内。
以下是配置示例:
android {
...
signingConfigs {
release {
storeFile file('E:\\****nce\\********tendance.jks')
storePassword '888888'
keyPassword '888888'
keyAlias 'key0'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
配置项详细介绍
-
signingConfigs:
release
: 这是签名配置的名称,您可以根据需要自定义。这里使用release
表示发布版本的签名配置。
-
storeFile:
file('E:\\****nce\\********tendance.jks')
: 指定keystore文件的路径。在Windows系统中,路径使用反斜杠(\\
)。
-
storePassword:
'888888'
: keystore文件的密码。这个密码是在生成keystore文件时设置的。
-
keyPassword:
'888888'
: 密钥的密码。这个密码是在生成密钥对时设置的。
-
keyAlias:
'key0'
: 密钥别名。在生成keystore文件时设置的别名。
-
buildTypes:
release
: 配置发布版本的构建类型。signingConfig signingConfigs.release
: 指定使用上面定义的release
签名配置。minifyEnabled false
: 是否启用代码混淆,这里设置为false
表示不启用。proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
: 指定ProGuard配置文件,用于代码混淆。
应用签名配置
确保将签名配置应用到您的构建类型中,例如release
版本。这样,Gradle在编译和打包发布版本时会使用指定的keystore文件进行签名。
通过以上步骤,您可以在build.gradle
文件中正确配置签名文件,确保在编译和打包应用时使用正确的数字签名。这样可以确保应用在发布时符合安全和完整性要求,并且能够在配置了SHA1签名的高德地图API令牌环境中正常运行。
申请高德API
要在高德地图平台上申请API Key,并确保应用能够正确使用高德地图的服务,可以按照以下步骤操作:
1. 注册和登录高德地图开发者平台
- 访问高德地图开发者平台: 打开 高德地图开放平台.
- 注册账号: 如果您没有账号,请点击注册并填写相关信息创建一个新账号。
- 登录: 如果已经有账号,直接登录。
2. 创建应用
- 进入开发者中心: 登录后,点击页面右上角的头像,选择“开发控制台”。
- 选择应用管理: 在左侧导航栏中选择“应用管理”。
- 创建应用: 点击“创建应用”按钮。
- 填写应用信息: 在弹出的页面中,填写应用名称、选择应用类型(如iOS、Android、Web服务等),并填写相关信息。
- 提交信息: 确认无误后,点击“确定”提交信息。
3. 获取API Key(密钥)
- 进入应用详情页: 在应用管理页面中找到刚刚创建的应用,点击应用名称进入详情页。
- 新增Key: 在应用详情页中找到“Key管理”,点击“新增Key”按钮。
- 选择服务类型: 选择您需要的服务类型(如“定位SDK”、“地图SDK”等)。
- 填写Key信息: 根据提示填写相关信息。
- 平台类型: 选择Android、iOS或者其他。
- 包名(Android): 填写您的应用包名。在项目的
app
模块中,找到并打开AndroidManifest.xml
文件。包名通常在<manifest>
标签中的package
属性中定义。 - SHA1(Android): 填写您的应用SHA1签名。
- Bundle ID(iOS): 填写您的应用Bundle ID。
4. 配置包名和SHA1签名(Android应用)
对于Android应用,您需要在创建Key时填写正确的包名和SHA1签名。以下是获取SHA1签名的步骤:
-
打开终端或命令行:
- 在Android Studio中打开终端,或者在操作系统的命令行工具中输入以下命令:
keytool -list -v -keystore [your_keystore_path] -alias [your_alias_name]
-
执行命令:
- 替换
[your_keystore_path]
为您生成的keystore文件路径,[your_alias_name]
为您生成密钥对时设置的别名。
- 替换
-
查看输出:
- 执行命令后,您将看到类似以下的输出:
Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: key0 Creation date: [date] Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code] Issuer: CN=[Your Name], OU=[Your Organizational Unit], O=[Your Organization], L=[Your City], ST=[Your State], C=[Your Country Code] Serial number: [serial number] Valid from: [start date] until: [end date] Certificate fingerprints: MD5: [your MD5 fingerprint] SHA1: [your SHA1 fingerprint] SHA256: [your SHA256 fingerprint] Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3
- 在输出中找到
SHA1
指纹,并将其填写到高德地图开发者平台上的相应字段中。
5. 激活服务权限
- 确认服务权限: 在应用详情页的“服务管理”中,确保您需要的服务(如定位服务、地图服务等)已启用。
- 保存设置: 确认无误后,点击“保存”按钮。
6. 使用API Key
-
在应用的代码中,使用获取的API Key进行配置。例如,在Android中,可以在
AndroidManifest.xml
中添加:<meta-data android:name="com.amap.api.v2.apikey" android:value="您的API Key"/>
7. 测试和发布
- 测试应用: 在应用中集成高德地图的功能后,进行测试,确保能够正常获取定位信息。
- 发布应用: 完成测试后,可以将应用发布到应用市场。注意,发布时使用的包名和签名必须与高德地图平台上配置的一致。
高德地图API Key错误的排查方法
latitude=0.0#longitude=0.0#province=#coordType=GCJ02#city=#district=#cityCode=#adCode=#address=#country=#road=#poiName=#street=#streetNum=#aoiName=#poiid=#floor=#errorCode=7#errorInfo=KEY错误#locationDetail=auth fail:INVALID_USER_SCODE#SHA1AndPackage#03:3A:AB:E6:C1:EC:0A:7B:A6:F4:12:A3:81:10:C5:FB:93:43:44:0B:com.zhenqi.ningxiaattandance#gsid#033004090204172049148400000029730029110#csid#1ed166f6a0d24ec1901a9b022c734157#0701#description=#locationType=0#conScenario=0
当高德地图API返回KEY错误
时,可以按照以下步骤进行排查:
1.检查Keystore文件:
- 确认您当前的app使用的Keystore文件与您申请高德API Key时提供的SHA1值的Keystore文件是否一致。
2.检查meta-data配置:
- 确认您的API Key在
AndroidManifest.xml
文件中的meta-data
标签中是否正确配置,并且没有多余的空格或其他字符。
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="您的API Key"/>
3.使用debug.keystore进行测试:
- 您可以尝试使用debug.keystore的SHA1值申请一个API Key进行测试。获取debug.keystore的SHA1值的代码如下:
public static String sHA1(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
byte[] cert = info.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(cert);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < publicKey.length; i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i])
.toUpperCase(Locale.US);
if (appendString.length() == 1)
hexString.append("0");
hexString.append(appendString);
}
return hexString.toString();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
4.检查包名:
-
确认您在高德地图开发者平台上注册应用时填写的包名与您的应用实际包名是否一致。包名不一致是一个常见错误。在项目的
app
模块中,找到并打开AndroidManifest.xml
文件。包名通常在<manifest>
标签中的package
属性中定义。包名也可以在 Gradle 配置文件中找到。在 Android 应用的 Gradle 构建脚本中,有一个名为
applicationId
的属性,它就是应用的包名。这个属性在defaultConfig
块中进行定义和配置。例如,在
build.gradle
文件中可以找到如下所示的配置:android { ... defaultConfig { applicationId "com.example.yourapp" minSdkVersion 21 targetSdkVersion 31 versionCode 1 versionName "1.0" ... } ... }
在这个例子中,
applicationId
的值是"com.example.yourapp"
,这就是应用的包名。这个值是在构建和打包应用时使用的唯一标识符。通过查看和确认这个
applicationId
属性,您可以确保在申请高德地图 API Key 时填写的包名与实际应用的包名一致,避免因包名不匹配而导致的 API Key 错误问题。
5.等待Key生效:
- 刚申请的API Key需要等待大约15分钟才能生效,请耐心等待后再进行尝试。
通过以上步骤,您可以有效排查和解决高德地图API Key的错误问题。确保所有配置正确无误后,API Key即可正常使用。