我完全不明白这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。虽然我一直得到错误openssl不识别为内部或外部命令。问题是,即使我能让它工作,我该做什么,然后做什么?


当前回答

这里是完整的细节(适用于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

其他回答

在你的应用程序中运行:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");

或:

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

你可以用这个apk

1.first install the app from the Google play store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want

如果你已经将应用程序上传到Play商店,你可以生成哈希密钥如下:

点击这里进入发布管理 选择“发布管理->应用签名” 你可以看到SHA1密钥十六进制格式的App签名证书。 复制十六进制格式的SHA1,并将其转换为base64格式,你可以使用这个链接做到没有SHA1:十六进制的一部分。 转到Facebook开发者控制台,在设置- > basic - > key哈希值中添加键(转换为base64后)。

这就是我如何获得我的:

private class SessionStatusCallback implements Session.StatusCallback {
        @Override
        public void call(Session session, SessionState state, Exception exception) {

            if (exception != null) {
                new AlertDialog.Builder(FriendActivity.this)
                        .setTitle(R.string.login_failed_dialog_title)
                        .setMessage(exception.getMessage())
                        .setPositiveButton(R.string.ok_button, null)
                        .show();
            }

因此,当您试图在没有密钥的情况下输入时,将会出现异常。Facebook在这个例外中加入了RIGHT键。你所要做的就是复制它。