我尝试在运行时更改我的应用程序图标和名称。
val pm = activity.packageManager
val packageName = BuildConfig.APPLICATION_ID
activity.packageManager.setComponentEnabledSetting(
ComponentName(packageName, packageName + activeName),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP)
for (i in disableNames.indices) {
try {
activity.packageManager.setComponentEnabledSetting(
ComponentName(packageName, disableNames[i]),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP)
} catch (e: Exception) {
e.printStackTrace()
}
}
应用程序图标和名称更改正确,但是如果在尝试更改应用程序主题后出现崩溃
Unable to start activity ComponentInfo{com.app.test.debug/com.app.test.presentation.ui.main.activity.MainActivity}: java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.app.test.debug/com.app.test.presentation.ui.main.activity.MainActivity-default}
我在做什么错了?
<activity-alias
android:exported="true"
android:label="Default"
android:icon="@mipmap/ic_launcher_red"
android:name=".presentation.ui.main.activity.MainActivity-default"
android:enabled="true"
android:targetActivity="com.app.test.presentation.ui.main.activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:exported="true"
android:label="Second alias"
android:icon="@mipmap/ic_launcher_green"
android:name=".presentation.ui.main.activity.MainActivity-settings"
android:enabled="false"
android:targetActivity="com.app.test.presentation.ui.main.activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
这是我的活动别名的样子
这部分关于代码的问题
activity.packageManager.setComponentEnabledSetting(
ComponentName(BuildConfig.APPLICATION_ID, "com.app.test.presentation.ui.main.activity.MainActivity-default"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
当我删除此部分时,它将有所帮助。但是现在我得到了两个新旧图标。旧图标不会删除。
逻辑:
1)启用活动别名。
2)禁用旧的活动别名
3)重新创建活动
4)崩溃java.lang.IllegalArgumentException:android.content.pm.PackageManager $ NameNotFoundException:ComponentInfo {com.app.test.debug / com.app.test.presentation.ui.main.activity.MainActivity-default}
答案 0 :(得分:0)
我认为您不为此操作使用清单配置。
清单中的必须设置活动别名
like:
<activity-alias android:enabled=["true"|"false"]
android:exported=["true"|"false"]
android:icon="drawable"
android:label="string resource"
android:name="string resource"
android:permission="string resource"
android:targetActivity="string resource">
</activity-alias>
我发现了this link
注意:
仅在Java中工作 如果需要,不要使用kotlin,因为在kotlin ComponentName()方法中,检查输入文件的存在性
使用Java代码和
答案 1 :(得分:0)
您没有做错任何事情
我有同样的问题。
仅在使用相同代码创建完全新的活动后才进行调试,以便再次获得Crash java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException:
它告诉您找不到活动-因为您更改了活动的名称-因此-无法找到该活动,无法安装和替换apk。 当您删除“ COMPONENT_ENABLED_STATE_DISABLED”时-您犯了第二个罪行-您留下了2个正在运行的活动。而一次只能允许一个。
要对其进行修复,请确保您返回默认的活动别名,否则您将无法再调试该活动。卸载应用程序,并可能创建新活动。 也许-我没有尝试-尝试更改活动别名的顺序,因此当前选择的活动将是第一个。