• 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
  • 相关阅读:
    platformIO开发arduino
    C++内存管理 (new、delete)知识点+完整思维导图+实操图+深入细节通俗易懂建议收藏
    k8s-部署rancher-页面化管理
    win10系统的应用商店不见了怎么安装回来
    【懒狗福音】自动化提取待复习内容 极大提高效率
    LINUX进程如何管理控制(二)
    c/c++字符串处理标准库 string 介绍
    static
    python -m SimpleHTTPServer 使用详解
    C#和JS交互之Microsoft.ClearScript.V8(V8引擎)
  • 原文地址:https://blog.csdn.net/Android_machong/article/details/132758043