Android - несколько файлов .apk из одной базы кода - PullRequest
16 голосов
/ 15 ноября 2011

Я разработал 3 приложения для Android, в которых основные функции одинаковы, но интерфейс выглядит иначе. Изображения и цвет фона у экранов разные.

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

Я попытался создать 3 разных пакета для папки src для 3 приложений. Но я не знаю, как установить папку Res для этих приложений.

Нужны указатели на создание единой базы кода, из которой мы можем сгенерировать несколько файлов .apk, которые включают только соответствующие папки src и res.

Ответы [ 5 ]

9 голосов
/ 15 ноября 2011
  • Используйте Android Library Project , который содержит весь ваш общий код.
  • Создайте отдельные проекты Android, которые ссылаются на библиотечный проект (вам нужно будет скопировать манифест в каждый из них и убедиться, что все компоненты объявлены с полным именем пакета Java).
  • Поместите любые ресурсы, специфичные для каждого приложения (рисунки, цвета и т. Д.), В отдельные папки ресурсов проекта, и они будут переопределять ресурсы с аналогичным именем в проекте библиотеки во время сборки.
1 голос
/ 15 ноября 2011

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

Обновление: этот ответ устарел при использовании системы сборки Gradle.

1 голос
/ 15 ноября 2011

Я думаю, что лучше всего использовать ant, вам нужно будет добавить цель ant для каждой сборки и изменить папку ресурсов. если вы используете сгенерированный build.xml, папка res определяется следующим образом <property name="resource.absolute.dir" location="res" /> так что вы захотите переопределить это

0 голосов
/ 23 апреля 2014

Я бы предложил использовать Gradle ароматов .

Кажется, все основы хорошо объясняются. Я только что закончил преобразование в Gradle сегодня, и оно прекрасно работает. Пользовательские значки приложений, имена, строки и т. Д.

Как объясняет веб-сайт, одна из целей этого дизайна состояла в том, чтобы сделать его более динамичным и упростить создание нескольких APK с практически одинаковым кодом, что звучит похоже на то, что вы делаете.

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

0 голосов
/ 15 ноября 2011

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

Альтернативой является создание уникального действия, котороединамически раздувается из 3 различных макетов в onCreate раз.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (...custom check for layout... equals(layout1)) {
        setContentView(R.layout.main_layout1);
    } else if (... equals(layout2)) {
        setContentView(R.layout.main_layout2);
    } else if (... equals(layout3)) {
        setContentView(R.layout.main_layout3);
    } else {
        throw new IllegalStateException("Unknown layout!");
    }
    ... your onCreate stuff....
}

Это облегчит обслуживание кода (только один источник кода для изменения, только один список версий и набор изменений для обслуживания)

Проверьте здесь: Как использовать SharedPreferences в Android для хранения, извлечения и редактирования значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...