![](/img/trans.png)
[英]After activity-alias name change for MainActivity, app icon is removed after app update
[英]NameNotFoundException when I change app icon and name with activity-alias
我嘗試在運行時更改我的應用程序圖標和名稱。
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}
我認為您不為此操作使用清單配置。
在清單中必須設置活動別名
喜歡 :
<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>
我找到了這個鏈接
這個github例子
注意:
它僅在Java中起作用,如果您希望不使用kotlin,因為在kotlin ComponentName()方法中,檢查輸入文件的存在性
使用Java代碼並
你沒做錯什么我也有同樣的問題。 僅在使用相同代碼創建完全新的活動以再次獲取后才設法進行調試Crash java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException:
它告訴您找不到活動-因為您更改了活動的名稱-因此-找不到活動,無法安裝和替換apk。 當您刪除“ COMPONENT_ENABLED_STATE_DISABLED”時-您犯了第二個罪行-您留下了2個正在運行的活動。 同時只能允許一個。
要對其進行修復,請確保返回默認活動別名,否則您將無法再調試此活動。 卸載應用程序,並可能創建新活動。 也許-我沒有嘗試-嘗試更改活動別名的順序,因此當前選擇的活動將是第一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.