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

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

Запуск: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid } Ошибка типа 3 Ошибка: класс активности {com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid} не существует.

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

вкусы build.gradle:

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

    pro {
        packageName "com.anthonymandra.rawdroidpro"
    }

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

Обновлять

удалена лишняя информация, не имеющая отношения к проблеме

Когда я декомпилировал apk, я убедился, что ни одно переопределение gradle не реализовано в Android.manifest.


person Anthony    schedule 17.02.2014    source источник
comment
Включите структуру вашего проекта, показанную в рассматриваемой студии Android.   -  person pyus13    schedule 17.02.2014
comment
Добавлено, хотя я могу подтвердить, что структура верна, поскольку профессиональная сборка правильно извлекает пользовательский код и правильно выполняется при запуске через аппаратную панель. Это просто проблема с запуском конфигурации запуска, хотя я не вижу, что нужно менять для разных вариантов.   -  person Anthony    schedule 17.02.2014
comment
попробуйте использовать имя пакета вкуса таким образом, как (ваш originalpackageneme.falvorName), например. : (com.anthonymandra.rawdroid.demo) и (com.anthonymandra.rawdroid.pro) и дайте мне знать, если это сработает.   -  person pyus13    schedule 17.02.2014
comment
Ошибка: класс активности {com.anthonymandra.rawdroid.demo/com.anthonymandra.rawdroid.RawDroid} не существует. Ошибка запуска, по-видимому, существует и для демонстрации, если я попытаюсь изменить имя пакета.   -  person Anthony    schedule 17.02.2014
comment
Что-то не так в вашем манифесте, я пробовал, на моей машине все работает нормально. Я обнаружил, что gradle автоматически обновляет ваш манифест во время компиляции, поскольку ваша предыдущая компиляция была неправильной, убедитесь, что вы правильно определили активность в манифесте или нет.   -  person pyus13    schedule 17.02.2014
comment
Если возможно, включите в вопрос свой полный файл манифеста.   -  person pyus13    schedule 17.02.2014
comment
Проверьте мой ответ, и мы продолжим его по ответу, а не по вопросу, если это не поможет.   -  person pyus13    schedule 17.02.2014


Ответы (2)


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

youractualapplicationpackage.flavorname

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

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 внесет необходимые изменения в имя пакета и выполнит сборку.

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

person pyus13    schedule 17.02.2014
comment
Все еще есть ошибка после ваших указаний. Даже если имя пакета исправит это, это вызовет проблему с загрузкой для воспроизведения, поскольку приложение уже выпущено, и я не могу изменить имя пакета. - person Anthony; 17.02.2014
comment
PackageName не является проблемой, поэтому рекомендуемая вещь. Я пробовал исключительно то, что у вас есть, и у меня отлично работает. То же самое произошло без изменений. Проверьте мое редактирование в именах пакетов. Ваш манифест должен находиться только в основном каталоге с именем основного пакета. Внесите изменения и проект Cleat и перестройте. - person pyus13; 17.02.2014
comment
это показывает, что {com.anthonymandra.rawdroidpro/com.anthonymandra.rawdroid.RawDroid} ваш манифест неверен. Пожалуйста, включите свой полный манифест, братан. - person pyus13; 17.02.2014
comment
Включен заголовок манифеста. Это 300 строк, поэтому включение полного манифеста было бы экстремально ;-). - person Anthony; 17.02.2014
comment
Это работает отлично. В настоящее время я делаю исчерпывающее сравнение обоих проектов. - person Anthony; 18.02.2014

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

'manifestmerger.enabled=false'.

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

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

person Anthony    schedule 18.02.2014