Работа с основным проектом и несколькими производными от него в Android

Я искал SO для этого и нашел несколько вещей, но я все еще не уверен, что полностью понимаю, поэтому прошу вас дать разъяснения.

Вот что мне нужно:

  • Иметь проект с определенной функцией: опрашивать веб-службу, отображать результаты в разных представлениях.

  • Имейте второй, третий и четвертый проект, который имеет точно такую ​​же функциональность, как и первый, но только другие графические элементы, такие как изображение заставки, значок, имя, имя пакета.

Итак, у меня есть ProjectCore с действиями и функциями. Project1 со значком автомобиля и изображением автомобиля для заставки. Project2 со значком самолета и изображением самолета для заставки. Что-то такое. Каждый проект имеет класс с такими константами, как «appId, appName, appServerURL»... Все вызовы веб-службы, отображение данных находятся в ядре, так как они одинаковы для всех проектов, только чтение выполняется из класса «Константы».

Я думал об этом подходе

  1. Сделайте ProjectCore проектом библиотеки с таким пакетом, как com.domain.core и фиктивными изображениями.
  2. Создайте Project1, добавьте в него ссылку на ProjectCore и с помощью пакета типа com.domain.code.project1 и в папке ресурсов поместите изображения с тем же именем, что и в основном проекте.
  3. Делаем Project2 по тому же принципу что и project1

Будет ли работать этот подход?

Спасибо.

Позднее редактирование. Я пробовал, как упоминалось ранее. Например, в проекте Core у меня был файл с именем splash.png. В папке с возможностью рисования Project1 и Project2 я поместил файл spash.png с другими изображениями. Это прекрасно работает. Запустив Project1 и Project2 на моем телефоне, каждое приложение запустилось с собственным изображением. Все идет нормально.

Затем, поскольку у меня есть разные константы, которые мне нужно использовать в моем приложении, я перешел в проект основной библиотеки и добавил:

public class C {
    public static String SomeConstant = "Project core!";
}

Здесь возникает проблема: мне нужно иметь разные постоянные значения для Project1 и Project2. Потому что в проекте Core класс находится, например, в com.domain.core.utils... Я не могу добавить один и тот же пакет в Project1 и Project2. Как добавить классы, чтобы я мог обновлять их значения и использовать их в каждом проекте с определенными значениями?

public class C {
    public static String SomeConstant = "Project 1 constant!";
}

public class C {
    public static String SomeConstant = "Project 2 constant!";
}

Спасибо!


person Alin    schedule 22.03.2012    source источник
comment
В качестве альтернативы стоит прочитать Скинирование приложения Android с помощью профилей сборки Maven .   -  person yorkw    schedule 23.03.2012
comment
ха-ха, я назвал свою CoreLibrary ;)   -  person Moog    schedule 23.03.2012


Ответы (3)


Вы хотите создать свою функциональность в проекте библиотеки, а затем расширить все свои проекты Branded/OEM/сторонних разработчиков, переопределяя изображения и строковые ресурсы, где это необходимо.

Когда вам нужно использовать «Константы», вы должны вместо этого иметь одну часть кода «запустить один раз» (например, заставку) для загрузки этих строк из файлов ресурсов:

public static final String CONSTANT_ONE;

    public void onCreate() { CONSTANT_ONE = getResources().getString(R.String.CONSTANT_ONE); }

ИЗМЕНИТЬ

Я не уверен, как будет выполняться инициализация окончательного значения onCreate(). Если final работает плохо, и вы беспокоитесь об изменении переменной во время выполнения программы, создайте переменную private (чтобы ей мог назначить только этот класс), а затем создайте функцию public static String getConstantOne().

person Graeme    schedule 23.03.2012

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

person kabuko    schedule 22.03.2012

Да, это должно работать нормально. Я сделал что-то похожее и обнаружил, что иногда у вас могут возникать некоторые обстоятельства, когда вы хотите вызвать из своего проекта библиотеки проект своего приложения. В этих случаях я использовал интерфейсы/абстрактные классы, определенные в проекте библиотеки, но реализованные в проекте приложения...

person Matt Wolfe    schedule 22.03.2012