標籤:盜版 簽名資訊 第三方apk
一般項目中有防盜版的需求,必須是正版軟體才能使用,這就需要擷取當前安裝包的簽名資訊和提前規定的簽名,Md5值做驗證,或者發布時候要檢驗apk簽名資訊以防止發錯包,造成不必要的損失。
擷取簽名資訊,通過遍曆已安裝的apk 獲得安裝過的對應apk是否與已知apk簽名一致
,包名你也可以指定任意已安裝過的apk,可以擷取第三方apk的簽名哦
/** * 擷取簽名資訊 * * @param aContext * Context * @return 簽名String */@SuppressWarnings("unused")private byte[] getSign(String mPakgeName) {List<PackageInfo> apps = pManager.getInstalledPackages(PackageManager.GET_SIGNATURES);Iterator<PackageInfo> iter = apps.iterator();PackageInfo info;while (iter.hasNext()) {info = iter.next();if (TextUtils.equals(info.packageName, mPakgeName)) {if (info.signatures.length > 0) {return info.signatures[0].toCharsString().getBytes();}}}return null;}
2 得到位元組後 ,需要轉化出成md5
/** 得到簽名. * @param mPakgeName * @return */private String getgetSignMd5(String mPakgeName) { byte[] signatture = getSign(mPakgeName); if (signatture == null) { return null; } if (TextUtils.isEmpty(signatture.toString())) { return null; } try {digest = MessageDigest.getInstance("Md5");digest.update(signatture);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} //此處為第三方應用使用的簽名演算法 byte[] b = digest.digest(); char[] HEXCHAR = { //列舉一個簽名演算法 ,此處應是你方應用自己的演算法 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; StringBuilder sb = new StringBuilder(b.length * 2); for (int i = 0; i < b.length; i++) { sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]); sb.append(HEXCHAR[(b[i] & 0x0f)]); } return sb.toString(); }
3 有時候我們需要獲得非系統apk應用資訊
/** 擷取非預裝的app * @return */public static List<PackageInfo> getAllApps() { apps = new ArrayList<PackageInfo>(); paklist = pManager.getInstalledPackages(0); for (int i = 0; i < paklist.size(); i++) { PackageInfo pak = (PackageInfo) paklist.get(i); //判斷是否為非系統預裝的應用程式 if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { apps.add(pak); } } return apps; }
xml 布局很簡單 因此不再多說了 不說了 比如擷取微博的簽名資訊。
安卓擷取某apk的簽名資訊,可用作防盜版進入。