Android通過包名獲取應用信息

android應用/遊戲上架國內渠道,國外GooglePlay接入的登錄或者支付驗證需要驗證包名,versionCode,簽名等應用信息,爲了快速檢查應用信息以工具化獲取應用信息。

tips:在Activity下直接用getPackageManager可獲取PackageManager實例

1、應用名:getPackageManager().getApplicationInfo(packName,0).loadLabel(getPackageManager());返回CharSequence
2、應用Icon:getPackageManager().getApplicationInfo(packName,0).loadIcon(getPackageManager());返回drawable
3、VersionCodegetPackageManager().getPackageInfo(packName,0).versionCode
4、VersionName:getPackageManager().getPackageInfo(packName,0).versionName
5、targetSdkVersion:getPackageManager().getPackageInfo(packName,0).applicationInfo.targetSdkVersion
6、minSDKVersion:getPackageManager().getPackageInfo(packName,0).applicationInfo.minSdkVersion
7、啓動項:getPackageManager().getLaunchIntentForPackage(packName)返回Intent,可用於跳轉
獲取啓動項類名:getPackageManager().getLaunchIntentForPackage(packName).getComponent().getClassName()
8、權限:getPackageManager().getPackageInfo(packName,PackageManager.GET_PERMISSIONS).requestedPermissions返回類型爲字符串數組
9、activity組件:getPackageManager().getPackageInfo(packName, PackageManager.GET_ACTIVITIES).activities返回ActivityInfo數據類

PackageInfo packageInfo = getPackageManager().getPackageInfo(packName, PackageManager.GET_ACTIVITIES)  
for (ActivityInfo activityInfo : packageInfo.activities){
//獲取activity名稱
Log.d(TAG,activityInfo.name+"\n");
 }

10、service組件:getPackageManager().getPackageInfo(packName, PackageManager.GET_SERVICES).services返回ServiceInfo數據類

PackageInfo packageInfo = getPackageManager().getPackageInfo(packName, PackageManager.GET_SERVICES)  
for (ServiceInfo serviceInfo : packageInfo.services){
//獲取service名稱
Log.d(TAG,serviceInfo.name+"\n");
 }

11、provider組件:getPackageManager().getPackageInfo(packName, PackageManager.GET_PROVIDERS).providers返回ProviderInfo數據類

PackageInfo packageInfo = getPackageManager().getPackageInfo(packName, PackageManager.GET_PROVIDERS)  
for (ProviderInfo providerInfo : packageInfo.providers){
//獲取provider名稱
Log.d(TAG,activityInfo.name+"\n");
 }

12、獲取keyhash:

 /**獲取Keyhash*/
    public static String getKeyhash(Activity activity, String packName){
        String KeyHash = "";
        try {
            int i = 0;
            PackageInfo info = activity.getPackageManager().getPackageInfo( packName,  PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                i++;
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                //KeyHash 
                Log.e(tag, "KeyHash: " + KeyHash);
            }
        }
        catch (Exception e) {
            Log.e(tag,"獲取keyhash失敗"+e.getMessage());
            KeyHash = "";
        }
        return KeyHash;
    }

13、獲取簽名MD5,SHA1,SHA256:

/**獲取SHA1
     * @param activity 當前activity
     * @param packName 包名
     * @param type 獲取數據類型:MD5,SHA1,SHA256
     * */
    public static String getSignatures(Activity activity, String packName, String type){
        String sha1 = "";
        PackageInfo info = null;
        try {
            info = activity.getPackageManager().getPackageInfo(packName, PackageManager.GET_SIGNATURES);

            byte[] cert = info.signatures[0].toByteArray();
            //type:MD5,SHA1,SHA256
            MessageDigest md = MessageDigest.getInstance(type);

            byte[] publicKey = md.digest(cert);
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < publicKey.length; i++) {
                String appendString = Integer.toHexString(0xFF & publicKey[i])
                        .toUpperCase(Locale.US);
                if (appendString.length() == 1){
                    hexString.append("0");
                }
                hexString.append(appendString);
                hexString.append(":");
            }
            String result = hexString.toString();
            Log.d(tag,"SHA1:"+result.substring(0, result.length()-1));
            return result.substring(0, result.length()-1);

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

14、獲取META_DATA標籤指定key的value

    /**獲取節點value*/
    public static String getMeta(Activity activity, String packName, String key){
        ApplicationInfo applicationInfo = null;
        String value = "";
        try {
            applicationInfo = activity.getPackageManager().getApplicationInfo(packName,PackageManager.GET_META_DATA);
            value = String.valueOf(applicationInfo.metaData.get(key));
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }catch (NullPointerException e){
            e.printStackTrace();
        }
        return value;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章