¿Es posible actualizar el Manifiesto de Android de forma programática?

Lo que quiero lograr:

Estoy creando una aplicación que cambia el icono de la aplicación y el nombre de la aplicación mediante programación.

Lo que he conseguido:

Ya he logrado esto porque sólo hay 5 nombres e iconos al declarar actividad-alias en android manifiesto.

Problema que estoy enfrentando:

Si sólo tiene 5 nombres, es fácil declararlo en el manifiesto. Pero ¿y si no sabes el no. De nombres y tiene que actualizar el manifiesto mediante programación.

A continuación se muestra mi código:

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> 

En 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); } 

Toda ayuda es apreciada;)

Asumiendo que su pregunta es la que está en el título:

¿Es posible actualizar el Manifiesto de Android de forma programática?

La respuesta es no , no es posible hacerlo programáticamente.

Puede activar o desactivar los componentes que se declaran en su manifiesto, pero no puede agregar o eliminar algo de allí, ya que, como dice el nombre, es un archivo de manifiesto, cuyo sistema "lee" cuando instala su aplicación. Así que declaras la interfaz de tu aplicación en ese manifiesto, más tarde no puedes cambiarlo, a menos que vuelvas a instalar la aplicación con otro manifiesto.

Suponga que el sistema le proporcionó la capacidad de hacerlo. A continuación, agregaría un poco de permiso a su manifiesto de forma dinámica, mientras que el usuario no ha aprobado que mientras estaba descargando su aplicación de Play Store.

  • Archivo binario XML file #: Error al inflacionar el fragmento de clase: Solo en Android (6.0) -Marshmallow
  • ¿Necesito android.permission.WAKE_LOCK para Google Play Services si sólo publico en Google Play Store?
  • ¿No deberían las referencias de cadena trabajar para los nombres de acciones de un filtro de intenciones en el AndroidManifest?
  • Cómo especificar actividades que sólo son para teléfonos o tabletas en Android
  • Permitir permiso para crear y administrar llamadas telefónicas y READ_PHONE_STATE
  • Android: marcadores de posición manifiestos para diferentes tipos de compilación
  • ¿Cuál es la diferencia entre declarar un filtro intencional en una actividad frente a un receptor?
  • ¿Cómo usar la misma autoridad de ContentProvider en las versiones gratuitas y de pago de la aplicación?
  • AndroidManifest actividad android: excludeFromRecents
  • Android: uses-sdk minSdkVersion es ignorado por Play Store?
  • FUSIÓN MANIFESTA: ¿Es posible ver el Manifiesto mixto resultante?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.