Возможно ли обновить программу Android Manifest?

Чего я хочу достичь:

Я создаю приложение, которое программно меняет значок приложения и имя приложения.

То, что я достиг:

Я уже достиг этого, потому что есть только 5 имен и значков, объявляя псевдоним активности в манифесте android.

Проблема, с которой я сталкиваюсь:

Если у вас есть только 5 имен, это легко объявить в манифесте. Но что, если вы не знаете, что нет. Имен, и вам необходимо обновить манифест программно.

Ниже мой код:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.drawerstack"> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity-alias android:label="@string/app_name1" android:icon="@drawable/ic_launcher" android:name=".MainActivity-Red" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name2" android:icon="@drawable/ic_launcher_1" android:name=".MainActivity-Pink" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name3" android:icon="@drawable/ic_launcher_2" android:name=".MainActivity-Blue" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name4" android:icon="@drawable/ic_launcher_3" android:name=".MainActivity-Grey" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> </application> </manifest> 

В MainActivity.java

  img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (view.getTag().equals(0)) { changeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Grey"); } else if (view.getTag().equals(1)) { changeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); } else if (view.getTag().equals(2)) { changeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); } else if (view.getTag().equals(3)) { changeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity"); } } }); private void changeIcon(final String pkgName) { doAsynchronousTask = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Date now = new Date(); if(now.after(afterDate)){ timer.cancel(); Common.dismissProgressDialog(MainActivity.this); finish(); } } }; timer.schedule(doAsynchronousTask, 0, 50000); Common.loadProgressDialog(MainActivity.this,false); getPackageManager().setComponentEnabledSetting( new ComponentName("com.drawerstack", pkgName), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } private void removeIcon(String removePkg) { getPackageManager().setComponentEnabledSetting( new ComponentName("com.drawerstack", removePkg), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } 

Каждая помощь приветствуется;)

Предполагая, что ваш вопрос имеет название:

Можно ли программно обновить Android Manifest?

Ответ – нет , это невозможно сделать программно.

Вы можете включать / отключать компоненты, объявленные в вашем манифесте, но вы не можете добавлять или удалять их там, потому что, как сказано в названии, это файл манифеста, который система «читает» при установке вашего приложения. Таким образом, вы объявляете интерфейс своего приложения в этом манифесте, позже вы не можете его изменить, если вы не переустановите приложение с другим манифестом.

Предположим, что система предоставила вам возможность сделать это. Затем вы добавляете какое-либо разрешение на ваш манифест динамически, тогда как пользователь не одобрил это, пока он загружал ваше приложение из Play Маркета.