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 сделают необходимые изменения имени пакета и сделают сборку.
То же самое отлично работало на моей машине, и я смог увидеть два разных приложения на своем устройстве для двух разных вкусов.