Android: eliminar la actividad del sabor

¿Cómo eliminar una actividad de un sabor de aplicación? Aquí está un ejemplo simplificado, tengo una aplicación que tiene los siguientes dos sabores (Pago y Libre). La aplicación es pequeña y sólo tiene 3 actividades (MainActivity, ActivityOne y ActivityTwo). La aplicación pagada no necesita ninguna limitación ya que utilizará la base de código completo. Sin embargo, la aplicación gratuita requiere que MainActivity y ActivityTwo sean accesibles para el usuario y no para ActivityOne. ¿Cómo puedo hacer una "Manifest Merge" al compilar el código para que ActivityOne no esté presente en la versión gratuita? En otras palabras, ¿cómo debería crearse src / free / AndroidManifest.xml para que la aplicación gratuita no tenga ActivityOne?

A continuación se muestra el archivo build.gradle para la aplicación:

apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.example.calculator" minSdkVersion 21 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { paid { applicationId "com.example.paid" resValue "string", "app_name", "Paid Calculator" versionName "1.0-full" } free { applicationId "com.example.free" resValue "string", "app_name", "Free Calculator" versionName "1.0-free" } } sourceSets { paid { manifest.srcFile 'src/paid/AndroidManifest.xml' } free { manifest.srcFile 'src/free/AndroidManifest.xml' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:cardview-v7:21.0.0' compile 'com.android.support:recyclerview-v7:21.0.0' compile 'com.android.support:design:22.2.0' compile 'com.android.support:appcompat-v7:22.2.0' } 

A continuación se muestra el archivo de manifiesto para la aplicación Se encuentra en src / main / AndroidManifest.xml :

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.calculator"> <application android:name="com.example.calculator.ui.activities.AppController" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"> <activity android:name=".ui.activities.MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ui.activities.ActivityOne" android:label="@string/title_activity_one" android:parentActivityName=".ui.activities.MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".ui.activities.MainActivity" /> </activity> <activity android:name=".ui.activities.ActivityTwo" android:label="@string/title_activity_two" android:parentActivityName=".ui.activities.MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".ui.activities.MainActivity" /> </activity> </application> </manifest> 

2 Solutions collect form web for “Android: eliminar la actividad del sabor”

En tu sabor libre , en el AndroidManifest puedes especificar:

 <activity android:name=".ui.activities.ActivityOne" tools:node="remove"/> 

Las herramientas marker : node = "remove" harán que la fusión elimine cualquier actividad con android:name=".ui.activities.ActivityOne"

Puede establecer el atributo android: enabled con un marcador de posición

AndroidManifest.xml:

 <activity android:name=".ui.activities.ActivityOne" android:enabled="${isPaidVersion}"/> 

Build.config:

 defaultConfig { ... manifestPlaceholders = [isPaidVersion: "false"] } productFlavors { paid { ... manifestPlaceholders = [isPaidVersion:"true"] } free { ... } } 
  • ClassNotFoundException en el sabor personalizado con kotlin
  • Archivos de sabor y recursos de Android
  • Android proyecto de desgaste con 3 sabores, 3 buildTypes y 2 applicationIdSuffixes
  • BuildConfigField dependiendo del sabor + buildType
  • Android - Cómo obtener ApplicationId de Flavor
  • Construir sólo por defecto (sin sabores / variantes)
  • Publicación de la Biblioteca de Android (aar) a Bintray con sabores elegidos
  • Android studio - Cómo hacer dos clases de aplicaciones personalizadas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.