8

我尝试生成 Keyhash 以将 Facebook 集成到我们的应用程序中,但是当我通过 cmd 提示生成 keyhash 时,它无法生成。

C:\Users\DON\.android>keytool -exportcert -alias androiddebugkey -keystore ~/.an
    droid/debug.keystore | openssl sha1 -binary | openssl base64

'keytool' 不是内部或外部命令、可运行程序或批处理文件。

我使用的另一个命令是:

C:\Program Files\Java\jdk1.6.0_20\bin>keytool -exportcert -alias androiddebugkey
     -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

'openssl' 不是内部或外部命令、可运行程序或批处理文件。

问题是什么?

4

5 回答 5

12

使用此命令首先下载此文件http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip。然后提取文件并运行以下命令:

C:\Program Files\Java\jdk1.6.0_20\bin>keytool -export -alias myAlias -keystore C:\Users\DON\.android\myKeyStore | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl enc -a -xtIm30l*********=

DON 是我的系统名称,应替换为您的系统名称。

于 2012-11-20T05:46:46.040 回答
9
  1. 下载openssl-for-windows软件包。
  2. 提取拉链。
  3. 在 Windows 中,编辑指向的路径系统变量<openssl-extracted-folder>/bin
  4. 然后运行命令。
于 2015-01-23T18:53:13.083 回答
4

首先进行 Facebook sdk 设置,然后在主程序中添加它,您将在控制台获得 keyhash

一次是调试,另一个是发布密钥,上传google更改签名后,您可以将所有这3个密钥提供给facebook开发者帐户,然后您可以检查facebook登录。根据您的应用程序模式,facebook 将匹配密钥。如果您不知道来自 android studio 的 android 监视器,请使用 toast 查看 keyhash

import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
   printKeyHash();
}


private void printKeyHash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.i("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("jk", "Exception(NameNotFoundException) : " + e);
    } catch (NoSuchAlgorithmException e) {
        Log.e("mkm", "Exception(NoSuchAlgorithmException) : " + e);
    }
}

}

于 2016-10-01T06:20:22.677 回答
2

这是迟到的答案,但它会帮助像我这样的懒人..将此代码添加到您的应用程序类中,无需下载 openssl 也无需设置路径..只需要复制我的代码.. keyHash 将在日志中生成。

import com.facebook.FacebookSdk;
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
        printKeyHash();
    }

    private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.i("KeyHash:",
                        Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("jk", "Exception(NameNotFoundException) : " + e);
        } catch (NoSuchAlgorithmException e) {
            Log.e("mkm", "Exception(NoSuchAlgorithmException) : " + e);
        }
    }
}

并且不要忘记在清单中添加 MyApplication 类:

<application
        android:name=".application.MyApplication"
</application>
于 2016-08-05T06:02:10.883 回答
0

从https://code.google.com/archive/p/openssl-for-windows/downloads下载 openssl 。

提取文件,然后在 CMD 中执行,重新规划路由和 KeyName

keytool -exportcert -alias KEYNAME -keystore "C:\Users\YOUR_USER\.android\debug.keystore" 
| "C:\URL_OPENSSL_EXTRACTED\bin\openssl" sha1 -binary 
| "C:\URL_OPENSSL_EXTRACTED\bin\openssl" base64.
于 2019-09-04T02:08:16.433 回答