Android: установите разные варианты с одинаковыми именами пакетов

Я разработал приложение для Android с тремя разными вариантами (производство, тестирование, обучение). Почти 99% исходных кодов идентичны. Только один файл в папке assert с URL-адресами сервера отличается для каждого варианта. Ароматизаторы работают идеально. Но я бы хотел, чтобы приложение устанавливало все 3 приложения на устройство, не перезаписывая друг друга. Поскольку имя пакета проекта одинаково для всех вариантов, оно перезаписывает приложение, когда я устанавливаю разные варианты.

Любые идеи или предложения? Заранее спасибо.


person Thilek    schedule 29.07.2014    source источник
comment
Разве изменение имени пакета для каждого вкуса не должно быть решением?   -  person joao2fast4u    schedule 29.07.2014
comment
Вы должны создать проект библиотеки с основной логикой и просто включить его в 3 отдельных проекта с разными именами пакетов. Приложения для Android идентифицируются по имени пакета, поэтому оно должно быть уникальным для каждого приложения.   -  person Willie Nel    schedule 29.07.2014
comment
Фактически все исходные файлы одинаковы, отличается только файл конфигурации в утверждении. Поэтому просто интересно создать разные имена пакетов для каждого вкуса. Можно ли получить доступ к действиям, если имена пакетов различаются по вкусу?   -  person Thilek    schedule 29.07.2014
comment
Вы имеете в виду файл в папке с ресурсами?   -  person joao2fast4u    schedule 29.07.2014
comment
@joao2fast4u да, файл в папке assert. я изменил имена пакетов, и теперь я могу установить все 3 варианта на устройство. Просто интересно, есть ли возможность указать разные имена приложений в build.gradle для ароматов, или мне нужно скопировать string.xml в папки ароматов?   -  person Thilek    schedule 29.07.2014


Ответы (1)


В любом случае, просто изменив имя пакета в build.gradle, он работает.

productFlavors {
    production {
        applicationId = "<your-package-surfix>.production"
    }

    testing {
        applicationId = "<your-package-surfix>.testing"
    }

    training {
        applicationId = "<your-package-surfix>.training"
    }
}

В AndroidManifest.xml используйте полное имя пакета при определении действия/службы/приемника.

person Thilek    schedule 29.07.2014
comment
с новым обновлением gradle 1. *.. нельзя использовать тестирование в качестве имени аромата.. оно зарезервировано для теста... - person Thilek; 13.04.2015
comment
не работает с ошибкой, packageName не будет изменено в вариантах сборки. Ошибка: (29, 0) Не удалось установить неизвестное свойство packageName для ProductFlavor_Decorated. - person Naveed Ahmad; 02.09.2017
comment
@NaveedAhmad это старый пост .. Вам больше не нужно имя пакета. Gradle больше не поддерживает свойство packageName. Подойдет только applicationId. - person Thilek; 13.09.2017