安卓获取某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的签名信息,可用作防盗版进入。

相关文章:

你感兴趣的文章:

标签云: