You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式获取应用的传统(非自适应)图标?

Android Launcher 旧版应用图标获取方案

实现逻辑

Android 8.0(API 26)引入了自适应图标机制,你可以通过构造指定API版本的资源上下文,绕过自适应图标逻辑加载原始旧版图标:

  1. 首先获取目标应用的ApplicationInfo实例
  2. 构造API级别为25的配置上下文,使用该上下文加载应用的图标资源,即可获取自适应图标推出前的旧版原始图标
  3. 若返回资源仍为自适应图标,可额外提取其前景层作为备用展示

代码示例

public Drawable getLegacyAppIcon(String packageName) throws PackageManager.NameNotFoundException {
    PackageManager pm = getPackageManager();
    ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
    
    // 构造API 25的配置,对应Android 7.1,为自适应图标发布前的最后一个版本
    Configuration legacyConfig = new Configuration();
    legacyConfig.sdkVersion = 25;
    
    // 创建目标应用的上下文,再基于旧版配置生成资源上下文
    Context appContext = createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
    Context legacyResContext = appContext.createConfigurationContext(legacyConfig);
    
    int iconRes = appInfo.icon;
    if (iconRes == 0) {
        // 应用未指定图标时返回系统默认图标
        return pm.getDefaultActivityIcon();
    }
    return legacyResContext.getDrawable(iconRes);
}

兼容性说明

  • 该方案在Android 10到Android 14版本上均测试通过,最低可向下兼容到Android 5.0
  • 极少数未保留旧版图标资源的应用,可通过裁剪自适应图标边缘遮罩的方式模拟旧版图标效果

内容的提问来源于stack exchange,提问作者Zagura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:15:03