我希望为我的应用程序生成一个应用程序签名,以后将与Facebook集成。在Facebook的一个教程中,我发现了这个命令:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
在教程中,它说通过运行这个cmd,我的生成签名的进程将开始。
但是,这个命令会给出一个错误:
openssl is not recognized as an internal or external command
我怎样才能摆脱这个?
步骤1
从https://code.google.com/archive/p/openssl-for-windows/downloads下载用于windows的SSL。
步骤2
解压文件夹到OpenSSL,并粘贴到“C:\Program Files”。
步骤3
在环境变量中添加“C:\Program Files\OpenSSL\bin”(编辑系统环境变量>环境变量> Path > New)。它将使openssl在终端中工作。
步骤4
将“C:\Program Files\Android\Android Studio\jre\bin”添加到环境变量中。它将使keytool在终端中工作。
步骤5
打开一个终端并执行:
keytool -exportcert -alias androiddebugkey -keystore .android\debug.keystore | openssl sha1 -binary | openssl base64
密码应该是android。
这是一个很晚的答案,但它将帮助像我这样的懒人。将此代码添加到你的Application类中,不需要下载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);
}
}
}
不要忘记在manifest中添加MyApplication类:
<application
android:name=".MyApplication"
</application>