文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android通过包名获取应用信息

2022-06-06 13:17

关注

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、VersionCode
getPackageManager().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:

 
    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:


    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

    
    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;
    }

作者:Gufra_Yin


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯