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


当前回答

很容易找到你的android项目的sha1

然后粘贴到这个网站上

对于get sha1只是

// vscode and my cmd
project-name/cd android && ./gradlew signingReport

// other 
project-name/cd android && ./gradlew signingReport

其他回答

https://developers.facebook.com/docs/android/getting-started/

4.19.0 - 2017年1月25日

Facebook SDK

修改

Facebook SDK现在在应用程序启动时自动初始化。在大多数情况下,不再需要手动调用FacebookSDK.sdkInitialize()。有关详细信息,请参见升级指南。

为调试

try {
    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

我遇到了完全相同的问题,我没有被要求提供密码,而且似乎我的密钥库文件路径错误。

事实上,如果keytool没有找到您设置的密钥存储库,它将创建一个密钥存储库,并提供错误的密钥,因为它没有使用正确的密钥。

一般的规则是,如果你没有被要求输入密码,那么你生成了错误的密钥。

这就是我如何获得我的:

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键。你所要做的就是复制它。

在你的应用程序中运行:

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