• Android 获取安装的app


    在Android逆向中,很多目标app会获取设备安装的app列表来判断设备的环境是否干净,下面将会从几个点分析如何获取设备安装的app

    PackageManager

    使用 PackageManager 可以获取设备上所有已安装的应用程序信息

    PackageManager packageManager = getPackageManager();
    List<ApplicationInfo> apps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
    for (ApplicationInfo appInfo : apps) {
        String appName = packageManager.getApplicationLabel(appInfo).toString();
        String packageName = appInfo.packageName;
        // 其他信息如版本号等也可以通过 appInfo 获取
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    调用PackageManager的getPackageInfo来判断app是否存在

    public boolean isAppInstalled(String packageName) {
        PackageManager pm = getPackageManager();
        try {
            pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    调用PackageManager的getApplicationInfo来判断app是否存在

    PackageManager pm = getPackageManager();
    ApplicationInfo appInfo = null;
    try {
        appInfo = pm.getApplicationInfo("com.example.myapp", 0);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    boolean isInstalled = (appInfo != null);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Intent

    通过发送一个隐式的 Intent ,你可以请求系统返回已安装应用的信息

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> apps = getPackageManager().queryIntentActivities(intent, 0);
    for (ResolveInfo appInfo : apps) {
        String appName = appInfo.loadLabel(getPackageManager()).toString();
        String packageName = appInfo.activityInfo.packageName;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    检测单个app是否存在

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setPackage("com.example.myapp");  // 替换成要检查的应用的包名
    List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent, 0);
    boolean isInstalled = !activities.isEmpty();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    模型的一些名词
    量子进化前瞻性优化算法(Python代码实现)
    从期货开户公司分享交易所手续费返还
    MySQL事务底层原理
    STM32 GPIO的几种工作模式
    管张汇泓:一份邮件把我带到了开源世界|OneFlow U
    【Python】python使用docxtpl生成word模板
    如何用 Prometheus Operator 监控 K8s 集群外服务?
    JavaFX、合并碰撞的弹球
    [数据结构-线性表1.1] 数组 (.NET源码学习)
  • 原文地址:https://blog.csdn.net/Android_machong/article/details/132758043