Android 使用代码获取签名信息

来源:互联网 发布:淘宝店铺转让合同模板 编辑:程序博客网 时间:2024/06/16 15:07

在使用百度地图,微信分享等等第三方SDK的时候,都需要在对应的网站上注册应用信息,其中之一就是通过包名和签名生成一个MD5或者SHA1编码的字符串。

通常情况下,这些信息可以通过ADT工具或者keytool命令工具去获取,这两种方式百度有很多就不再累述了。主要说一下怎么使用代码获取这些信息,然后也方便使用,不像微信提供的签名工具那么抠,都不能复制这些信息,极为不方便。

首先看一下使用keytool获取的签名信息:


证书指纹有3个类型,一般要求是前两个。这里就直接贴上代码获取这些证书指纹。

<span style="font-family: Arial, Helvetica, sans-serif;">/**</span>
 * 应用签名信息 * Created by Carlton on 2014/11/27. */public class AppSigning{    public final static String MD5    = "MD5";    public final static String SHA1   = "SHA1";    public final static String SHA256 = "SHA256";    /**     * 返回一个签名的对应类型的字符串     *     * @param context     * @param packageName     * @param type     *     * @return     */    public static ArrayList<String> getSingInfo(Context context, String packageName, String type)    {        ArrayList<String> result = new ArrayList<String>();        try        {            Signature[] signs = getSignatures(context, packageName);            for (Signature sig : signs)            {                String tmp = "error!";                if (MD5.equals(type))                {                    tmp = getSignatureString(sig, MD5);                }                else if (SHA1.equals(type))                {                    tmp = getSignatureString(sig, SHA1);                }                else if (SHA256.equals(type))                {                    tmp = getSignatureString(sig, SHA256);                }                result.add(tmp);            }        }        catch (Exception e)        {            e.printStackTrace();        }        return result;    }    /**     * 返回对应包的签名信息     *     * @param context     * @param packageName     *     * @return     */    public static Signature[] getSignatures(Context context, String packageName)    {        PackageInfo packageInfo = null;        try        {            packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);            return packageInfo.signatures;        }        catch (PackageManager.NameNotFoundException e)        {            e.printStackTrace();        }        return null;    }    /**     * 获取相应的类型的字符串(把签名的byte[]信息转换成16进制)     *     * @param sig     * @param type     *     * @return     */    public static String getSignatureString(Signature sig, String type)    {        byte[] hexBytes = sig.toByteArray();        String fingerprint = "error!";        try        {            MessageDigest digest = MessageDigest.getInstance(type);            if (digest != null)            {                byte[] digestBytes = digest.digest(hexBytes);                StringBuilder sb = new StringBuilder();                for (byte digestByte : digestBytes)                {                    sb.append((Integer.toHexString((digestByte & 0xFF) | 0x100)).substring(1, 3));                }                fingerprint = sb.toString();            }        }        catch (NoSuchAlgorithmException e)        {            e.printStackTrace();        }        return fingerprint;    }}
如果你的keystore里面就只有一个签名信息,那么可以这样获取,以获取MD5为例:
String md5Info= AppSigning.<span style="font-family: Arial, Helvetica, sans-serif;">getSingInfo(context, "com.xxx",AppSigning.MD5).get(0);</span>
2 0
原创粉丝点击