簡體   English   中英

使用活動別名更改應用程序圖標和名稱時出現NameNotFoundException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM