我完全不明白这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。虽然我一直得到错误openssl不识别为内部或外部命令。问题是,即使我能让它工作,我该做什么,然后做什么?
当前回答
自从API 26以来,你可以在KOTLIN中使用以下代码生成你的HASH key,而不需要任何Facebook SDK。
fun generateSSHKey(context: Context){
try {
val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.getEncoder().encode(md.digest()))
Log.i("AppLog", "key:$hashKey=")
}
} catch (e: Exception) {
Log.e("AppLog", "error:", e)
}
}
其他回答
自从API 26以来,你可以在KOTLIN中使用以下代码生成你的HASH key,而不需要任何Facebook SDK。
fun generateSSHKey(context: Context){
try {
val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.getEncoder().encode(md.digest()))
Log.i("AppLog", "key:$hashKey=")
}
} catch (e: Exception) {
Log.e("AppLog", "error:", e)
}
}
Windows:
打开命令提示符并粘贴下面的命令
键盘出口,又名仙女座键盘 HOMEPATH % \调试机器人。keystore | openssl sha1 -binary | openssl base64
输入密码:android——>按Enter键 用你的开发者账号登录Facebook 去你的Facebook应用程序>设置>粘贴哈希键在“键哈希”选项>保存更改。 现在用Facebook登录/分享等测试你的android应用。
简单的方法
通过使用这个网站,您可以通过将SHA1密钥转换为Facebook的哈希密钥来获得哈希密钥。
也有一个简单的解决方案。在你的应用中运行这个:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
一个不需要FB SDK(基于这里的解决方案)的较长的例子:
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
结果应该以“=”结尾。
这里是完整的细节(适用于Windows)
1. 根据您的32位或64位系统下载第三或第四版OpenSSl(使用e会更好)。
2. 解压到C目录下下载的zip文件
3.打开解压的文件夹到bin并复制路径,它应该是C:\openssl-0.9.8 k_x64 \bin\openssl(在结束时添加\openssl)
4. (获取Jdk bin文件夹的路径,如果你知道怎么做,忽略这个)。
打开android studio ~file~Project Structure(ctrl+alt+shift+s),在左侧面板中选择SDK location,复制JDK位置并添加/bin
因此,最终的JDK位置将类似于C:\Program Files\Android\Android Studio\jre\bin
我们使用这种方法来获取Jdk的位置,因为你可能像我一样使用嵌入式Jdk
现在你有了OpenSSl的位置和JDK的位置
5. 现在我们需要调试密钥库的位置,为打开C~>Users~>YourUserName~>。Android应该有一个文件名调试。Keystore,复制路径位置,应该是这样的
C:\Users\Redman\.android\ debug.keystore
6. 现在打开命令提示符并键入命令
cd YourJDKLocationFromStep4
对我来说
cd "C:\Program Files\Android\Android Studio\jre\bin"
7. 现在构造以下命令
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
在我的例子中,命令如下所示
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
现在在命令提示符中输入这个命令,如果你做对了,你会被要求输入密码(密码是android)
Enter keystore password: android
就是这样,你会得到Key Hash,只是复制它并使用它
对于Signed KeyHash,构造以下命令
keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
输入您的密钥库密码,如果您输入错误的密码,它将给出错误的KeyHash
请注意
如果出于某种原因,如果它在某些路径上给出错误,那么将该路径用双引号括起来。此外,Windows power shell对我来说工作不太好,我使用git bash(或使用命令提示符)。
例子
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
推荐文章
- 什么是“android. r.b ayout.simple_list_item_1”?
- 将字符串转换为Uri
- 在Android中创建临时文件
- INSTALL_PARSE_FAILED_NO_CERTIFICATES错误是什么?
- 在Android中定义RelativeLayout视图的Z顺序
- jUnit中的字符串上的AssertContains
- 将JSON转换为映射
- Android Studio 3.0口味维度问题
- 在Java8中使用lambda仅在不为空时筛选值
- Java反射中的getFields和getDeclaredFields有什么区别
- 这个谷歌播放APK发布错误消息是什么意思?
- 如何检查一个文件夹是否存在?
- 如何创建在移动设备上呼叫电话号码的超链接?
- 错误:无法在intelliJ IDE中找到或加载主类
- 如何创建Android Facebook密钥哈希?