1. 生成签名证书

  • 在Android Studio工程的菜单栏中,依次点击Build > Generate Signed Bundle/APKStep 1

  • Generate Signed Bundle or APK对话框中,选择Android App BundleAPK,然后点击 Next; Step 2

  • 在填写签名文件信息页面,如果已经存在签名文件,则点击Choose existing...选择签名文件,并填写对应签名文件的Key store passwordKey aliasKey password,然后点击NextStep 3

  • 如果不存在签名文件,则选择Create new...创建一个新的签名文件,在New Key Store窗口中填写Key store pathPasswordKey AliasKey PasswordCertificate等信息,然后点击OKStep 4

  • 完成新签名文件创建后,在Generate Signed Bundle or APK弹出框页面上会显示对应签名文件的信息,然后点击Next就可以使用创建的签名文件打包了。

2. 签名证书指纹

通常在创建第三方平台创建应用的时候可能会使用到应用的签名证书指纹,比如SHA1、SHA256等,以下提供两种生成签名证书指纹的方法。

2.1 Gradle任务

首先要先在项目中完成签名证书的配置,然后在Android Studio中运行Gradle signingReport任务:

  • 依次选择View > Tool Windows > Gradle以打开Gradle工具窗口
  • 依次选择YourProject > Tasks > android,双击signingReport任务输出签名证书指纹。

Gradle signingReport任务输出内容如下: Image

[!TIP] 注意:如果在 Gradle 任务列表中没看到 signingReport,请通过依次选择File > Settings(在 macOS 上则需依次选择 Android Studio > Settings)打开 Android Studio 设置对话框,选择 Experimental,然后在 Gradle 标题下取消选中Only include test tasks in the Gradle task list generated during Gradle sync的复选框,点击右下角的Apply关闭该窗口后选择File > Sync Project with Gradle Files将项目与 Gradle 文件同步。

2.2 命令行工具

在 Windows 环境下打开命令行工具,进入keytool.exe所在的目录,或者在 macOS 环境下打开Terminal终端,然后执行命令keytool -list -v -keystore <keystore-file>,按命令行提示进行操作,其中<keystore-file>为应用签名证书的完整路径:

keytool -list -v -keystore D:\WorkSpace\Sofish\app\sofish.jks

keytool命令输出内容如下: Image

3. 签名密钥哈希

Facebook在创建应用的时候需要提供密钥哈希,Facebook支持同时配置多个密钥哈希,以下提供两种生成密钥哈希的方法。

3.1 Java代码

确保配置的签名正确后,可以通过以下代码生成密钥哈希:

private void generateKeyHash(Context context) {
    try {
        String packageName = context.getPackageName();
        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
        Signature[] signatures = packageInfo.signatures;
        if (signatures != null && signatures.length > 0) {
            for (Signature signature : signatures) {
                MessageDigest digest = MessageDigest.getInstance("SHA-1");
                digest.update(signature.toByteArray());
                String keyHash = Base64.encodeToString(digest.digest(), Base64.DEFAULT);
                System.out.println("KeyHash ==> " + keyHash);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

[!TIP] 在发布应用时,通常会使用与开发环境不同的签名证书完成签名,请确保在Facebook 开发者设置中配置正确的密钥哈希,Facebook支持同时配置多个密钥哈希。

3.2 命令行工具

在 Windows 环境下通过 Google 代码归档 下载 OpenSSL,或者在 macOS 环境下通过 OpenSSL 下载 OpenSSL,OpenSSL配置完成后,在命令行工具中执行命令keytool -exportcert -alias <alias> -keystore <keystore-file> | openssl sha1 -binary | openssl base64,其中<alias>为签名证书的别名,<keystore-file>为应用签名证书的完整路径:

keytool -exportcert -alias sofish -keystore D:\WorkSpace\Sofish\app\sofish.jks | openssl sha1 -binary | openssl base64

results matching ""

    No results matching ""