• 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
  • 相关阅读:
    Wireshark分析HTTPS流量
    学术分享 | 清华大学 康重庆:电力系统碳计量技术与应用(Matlab代码实现)
    vmware虚拟机开机之后一直闪烁
    文件上传-保存在本地
    Go 小知识之 Go 中如何使用 set
    简单聊聊k8s,和docker之间的关系
    OpenCV颜色查找表
    【web-music】vue3 开发遇到的问题
    PE结构学习(6)_重定位表
    【0144】postmaster创建System V Shared Memory(共享内存)的背后机制
  • 原文地址:https://blog.csdn.net/Android_machong/article/details/132758043