# HYAppIcon
**Repository Path**: lixy/HYAppIcon
## Basic Information
- **Project Name**: HYAppIcon
- **Description**: 动态修改app启动图标
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-02-03
- **Last Updated**: 2026-02-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### Android动态修改应用图标 改变启动图标
注意:如果activity-alias方式有问题 可以换成子类继承的方式创建多个Activity使用别名的包名类名即可
app以后都要保持这些图标配置,不能乱删和乱禁用,小心桌面图标被禁了导致无图标无法进入app的情况,除非主启动页直接换了包路径或类名
补充:经对比发现,android10以下手机,使用activity-alias方式在最近任务中没有图标。。。这也是市面上选择不支持Android10以下的一个因素吧,10+就有图标了
使用activity的方式任何系统版本都有图标,但是Android10以下没换完的就会有应用未安装的提示。而activity-alias方式没出现提示应用未安装的情况。
使用:
使用 的方式 android9及以下非主活动: 最近任务都无图标,换回主活动有。 继承主启动页Activity的方式没问题。就是没换完提示应用未安装。换完就好了
[](https://jitpack.io/#com.gitee.mahongyin/HYAppIcon)
```groovy
maven { url 'https://jitpack.io' }
//公仓
implementation 'com.gitee.mahongyin:HYAppIcon:0.1.1'
```
清单文件配置的所有桌面图标,和默认启用的意图路径名
android:enabled="false/true" 来设置默认启用的
```xml
清单文件配置需要换图标的别名或继承主启动页的子类
......
```
```java
//将所有的桌面图标意图传给HyAppIconUtils
ComponentName componentName2 = new ComponentName(this, "com.mhy.hyappicon.demo.faviconA");
ComponentName componentName1 = new ComponentName(this, "com.mhy.hyappicon.demo.LaunchActivity");
List list = new ArrayList<>();
list.add(componentName2);
list.add(componentName1);//默认启用的那个
HyAppIconUtils.initAllIconComponentName(list, componentName1);
//设置换图标目标为2
void changeIcon(){
HyAppIconUtils.changeAppIcon(IndexActivity.this, componentName2));
}
```
结束。
android10及以上 会立即退出app 【清栈】
android10以下会慢一些 得过一会才会退出app 【清栈】
如果需要启动时无感换图标。那么参考 [Android动态修改应用图标最佳实践 - 简书 (jianshu.com)](https://www.jianshu.com/p/8df4283701c6)
原理就是在**启动页**先跳转 中间过渡页[独立栈],让过渡页去跳转home页即可
也就是把换图标的那些代码挪到中间过渡页中
```kotlin
//中间过渡activity
class TansparentActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
LogCat.i("应用换标 过渡页")
......
HyAppIconUtils.initAllIconComponentName(list, componentName1);
//跳转主页 这里就会清理这个栈而不会影响启动的栈
launchMain(intent, "icon")
HyAppIconUtils.changeAppIcon(IndexActivity.this, componentName2);
finish()
overridePendingTransition(0, 0)
}
}
```
```xml
中间过渡 activity 配置 注意方向 android:screenOrientation="behind" 别写死成 android:screenOrientation="portrait" android 8.0 会崩溃
- true
- true
- true
- shortEdges
- @null
```
------
另外还可以更换 启动图 只需再清单文件设置对应theme的android:windowBackground 例如:
```xml
在activity[-alis]里对应设置需要的主题即可
```