Android Gradle Развертывание варианта сборки

Я только что закончил настройку вариантов сборки с помощью Gradle в Android Studio. Какое благословение это будет для типичной демонстрационной/профессиональной настройки. Я могу запустить приложение "demoDebug" отлично. Когда я переключаюсь на "proDebug" и "Run" с той же конфигурацией, он устанавливает хорошее приложение pro, но сбрасывает его:

Начало: Intent {act = android.intent.action.MAIN кот = [android.intent.category.LAUNCHER] CMP = com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid } Тип ошибки 3 Ошибка: класс действия {Com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid} не существует.

Если я перейду на панель инструментов, я могу запустить про-версию, и она работает так, как ожидалось. Поэтому установка работает для соответствующей версии; там только что-то не так в запуске (на pro).

build.gradle flavors:

productFlavors {
    demo {
        packageName "com.anthonymandra.rawdroid"
    }

    pro {
        packageName "com.anthonymandra.rawdroidpro"
    }

    proAmazon {
        packageName "com.anthonymandra.rawdroidpro"
    }
}

Update

очищенная внешняя информация, не связанная с проблемой

Когда я декомпилировал apk, я подтвердил, что ни один из переопределений Gradle не реализован в Android.manifest.

Ответ 1

Проблема заключалась в следующем:

'manifestmerger.enabled = ложь.

Я отключил функцию a назад, потому что это вызвало проблемы с библиотекой. Тем временем я забыл об этом, но, по-видимому, слияние библиотек также относится к слиянию gradle. Я полагаю, что это имеет смысл, но им действительно необходимо разрешить разделение между слиянием gradle и слиянием библиотек.

Спасибо @pyus13 за безостановочную поддержку, пока я не пришел к типичному "О, да, ты издеваешься..."

Ответ 2

Сначала у вас должно быть имя пакета в виде (рекомендуемый подход не обязательно):

youractualapplicationpackage.flavorname

Но у вас может быть файл packagname, который вы хотите для ароматов, например, в вашем случае:

productFlavors {
    demo {
        packageName "com.anthonymandra.rawdroiddemo"
    }

    pro {
        packageName "com.anthonymandra.rawdroidpro"
    }

    proAmazon {
        packageName "com.anthonymandra.rawdroidpro"
    }
}

убедитесь, что com.anthonymandra.rawdroid - это пакет приложения java в каталоге main/java.

Ваш AndroidManifest.xml должен быть таким (Только внутри основного каталога):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anthonymandra.rawdroid" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
      android:name=".RawDroid"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name"
      android:theme="@style/GalleryTheme" >
        <intent-filter>
           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
 </activity>

</application>

</manifest>

И он должен находиться только в директории main не где-либо еще.

Во время компиляции gradle сделают необходимые изменения имени пакета и сделают сборку.

То же самое отлично работало на моей машине, и я смог увидеть два разных приложения на своем устройстве для двух разных вкусов.