Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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> 

  • Java.lang.LinkageError: MainActivity
  • Tarea personalizada de Android Gradle por variante
  • Los sabores de los productos Android Studio solo reconocen uno de los dos sabores
  • File: /// android_res / drawable no funciona cuando se usa sabor con otro nombre de paquete
  • Crashlytics (Fabric) separa las organizaciones para las variantes de aplicación (tipos de construcción, sabores de producto)
  • Android GCM con sabores de producto
  • ¿Puedo construir todos mis sabores de generación de gradle a la vez?
  • BuildConfigField VS campo de clase? Recurso resValue VS
  • 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 { ... } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.