Android在代碼中獲取應用簽名


平時都是用AS敲命令獲取簽名信息。。。還沒有在代碼中獲取過簽名~

也算是老編程了,沒做過這個稍微有點尷尬。。。本着有好輪子就用的原則,網上找了幾篇博客,這塊內容已經很完善了,我也沒什么可以優化的。。。

主要參(zhao)考(chao)了http://blog.csdn.net/hcwfc/article/details/41560591這篇博客,下面貼上代碼:

獲取簽名封裝類:

public class AppInfoUtils {

    public final static String SHA1 = "SHA1";

    /**
     * 返回一個簽名的對應類型的字符串
     *
     * @param context
     * @param packageName
     * @param type
     *
     * @return
     */
    public static String getSingInfo(Context context, String packageName, String type) {
        String tmp = null;
        Signature[] signs = getSignatures(context, packageName);
        for (Signature sig : signs) {
            if (SHA1.equals(type)) {
                tmp = getSignatureString(sig, SHA1);
                break;
            }
        }
        return tmp;
    }

    /**
     * 返回對應包的簽名信息
     *
     * @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;
    }
}

  在代碼中調用(獲取SHA1值):

String signal = AppInfoUtils.getSingInfo(getApplicationContext(), getPackageName(), AppInfoUtils.SHA1);

  同理,我們也可以獲取MD5和SHA256的值。

不習慣直接轉載,喜歡自己擼一下,不過文中肯定會附上原作的id的~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM