以前就有看到过supersu那个app里面可以设置应用图标,一直不是很了解它是怎么实现的,闲来无聊,反编译看了看manifest文件,发现它是使用了activity-alias来实现的,网上查找资料后,找到了大致可行的解决方案,主要包含以下几步:
1、通过配置activity-alias别名,将多个别名指向同一个Activity,该Activity是包含了android.intent.action.MAIN
和android.intent.category.LAUNCHER
的。
2、在AndroidManifest.xml文件中,把其他的activity-alias设置为 android:enabled=”true”
,并设置不同的label和icon。
3、在代码中可以设置哪些Activity或者activity-alias是否可用。
主要部分代码如下:
Manifest文件
1 | <activity android:configChanges=”locale|keyboard|keyboardHidden|orientation|screenLayout|screenSize” android:excludeFromRecents=”true” android:exported=”true” android:hardwareAccelerated=”true” android:icon=”@drawable/transparent” android:label=”@string/appname_supersu” android:launchMode=”singleTask” android:name=”.MainActivity” android:noHistory=”false” android:theme=”@android:style/Theme.Translucent”> |
JAVA代码
1 | PackageManager pm = getApplicationContext().getPackageManager(); |
记录备忘。