【问题标题】:How to generate Keyhash (Facebook) using the Keytool in android for W7 32bit如何使用 Android 中的 Keytool 为 W7 32 位生成密钥哈希(Facebook)
【发布时间】:2012-11-19 05:19:32
【问题描述】:

我尝试生成 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' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

有什么问题?

【问题讨论】:

  • 首先在您的 s/m 中搜索 keytool 应用程序并导航到该目录并使用命令
  • @droidhot 先生,我听不懂,请你解压
  • 'keytool' 不是内部或外部命令,说明 C:\Users\DON.android> 不包含 keytool.exe
  • @droidhot 先生,如何在我们的 .android 文件夹中获取这个 keytool.exe

标签: android facebook


【解决方案1】:

使用这个命令首先下载这个文件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 是我的系统名称,应替换为您的系统名称。

【讨论】:

  • 如果它说:未知选项'-xtlm301*********='。它通过在最后替换 base64 来工作。 keytool -export -alias myAlias -keystore C:\DON\.android\myKeyStore | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl base64 @Rishi Gautam - 谢谢!!拯救了我的一天。
【解决方案2】:
  1. 下载openssl-for-windows 包。
  2. 解压缩。
  3. 在 Windows 中,编辑指向<openssl-extracted-folder>/bin 的路径系统变量
  4. 然后运行命令。

【讨论】:

  • 嗨 Mushtaq,你能告诉我如何编辑路径吗?我是堆栈。请帮帮我
  • 嗨@AndroidEnthusiast 你可以按照这个来设置路径变量superuser.com/questions/284342/…
  • 感谢您的回复。我稍后会试试这个。对不起 Mushtaq,我在终端不好:D
  • @AndroidEnthusiast 嘿,无需道歉,希望对您有所帮助
【解决方案3】:

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

可能有 3 个类型的密钥,一次是调试,另一个是发布密钥,上传 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);
    }
}

}

【讨论】:

    【解决方案4】:

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

    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>
    

    【讨论】:

      【解决方案5】:

      从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.
      

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多