📜  flutter get app sha1 sha256 without keytool (1)

📅  最后修改于: 2023-12-03 14:41:15.141000             🧑  作者: Mango

获取Flutter应用的SHA1和SHA256指纹而无需使用keytool

对于许多应用程序,获取应用程序的SHA1和SHA256指纹是一个重要的步骤,例如在使用Google Map API或Firebase等服务时。然而,使用keytool工具来获取这些指纹可能有点繁琐和麻烦。 幸运的是,在Flutter中,有一种更简单的方法来获取应用程序的SHA1和SHA256指纹。

获取SHA1指纹

要获取SHA1指纹,只需按照以下步骤进行操作。

  1. 在Flutter工程的根目录下创建一个文件命名为 key.properties
  2. 在该文件中添加以下行:
    storePassword=<your_keystore_password>
    keyPassword=<your_key_password>
    keyAlias=<your_key_alias>
    storeFile=<relative_path_to_keystore_file>
    
  3. 用你的实际值替换前面的 <your_keystore_password>, <your_key_password>, <your_key_alias>, 以及 <relative_path_to_keystore_file>。
  4. 运行以下命令来获取SHA1指纹:
    flutter build apk
    keytool -list -v -keystore <relative_path_to_keystore_file> -alias <your_key_alias>
    
    在执行命令后,你应该可以看到你的应用程序使用的证书信息,其中包含你的SHA1指纹。
获取SHA256指纹

要获取SHA256指纹,只需按照以下步骤进行操作。

  1. 创建一个文件并将以下内容复制粘贴进去:
    import 'package:flutter/services.dart';
    import 'package:flutter/material.dart';
    import 'dart:convert';
    import 'dart:core';
      
    void main() => runApp(MyApp());
      
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Builder(
              builder: (BuildContext context) {
                return RaisedButton(
                  child: Text("Get the App's SHA256 Fingerprint"),
                  onPressed: () async {
                    try {
                      var bytes = await rootBundle.load('assets/keystore.jks');
                      var androidKeystore = String.fromCharCodes(bytes.buffer.asUint8List());
                      var methodChannel = MethodChannel("com.example.sha2");
                      final result = await methodChannel.invokeMethod("getSHA256", {
                        "keystore": androidKeystore,
                        "alias": "mykey",
                        "password": "password"
                      });
                      Scaffold.of(context).showSnackBar(SnackBar(
                          content: Text('SHA256 Fingerprint: ${result['sha256']}')));
                    } catch (error) {
                      Scaffold.of(context)
                          .showSnackBar(SnackBar(content: Text(error.toString())));
                    }
                  },
                );
              },
            ),
          ),
        );
      }
    }
    
  2. 将keystore.jks文件放置在flutter应用的assets目录下,并使用你自己的keystore替换该文件。
  3. 在Flutter工程的pubspec.yaml文件中,添加以下内容:
    flutter:
      assets:
        - assets/keystore.jks
    
  4. 在flutter应用中,创建一个名为 AndroidMethods.dart 的文件并将以下内容复制粘贴进去:
    import 'dart:async';
    import 'dart:convert';
      
    import 'package:flutter/services.dart';
      
    class AndroidMethods {
      static const MethodChannel _channel = const MethodChannel('com.example.sha2');
      
      static Future<Map<String, dynamic>> getSHA256(
          String keystore, String alias, String password) async {
        final Map<String, dynamic> params = <String, dynamic>{
          'keystore': keystore,
          'alias': alias,
          'password': password
        };
        final Map<String, dynamic> result =
            await _channel.invokeMapMethod<String, dynamic>('getSHA256', params);
        return result;
      }
    }
    
  5. 在flutter应用中,ActionBar的Widget中添加 MyApp,并运行应用程序。你将看到一个按钮,点击它将显示应用程序的SHA256指纹。
- 注意:请确保在运行应用程序之前已将源代码中的所有占位符值替换为实际值。