Как разделить библиотеки в соответствии с целевым устройством? - PullRequest
0 голосов
/ 16 июня 2020

Я разрабатываю приложение для некоторых устройств с нестандартным оборудованием, они от разных производителей, но цель и c на уровне приложения одинаковы, каждое устройство имеет свой SDK. Можно ли фильтровать каждый SDK в соответствии с целевым устройством?

Я думал что-то вроде препроцессоров в C / C ++, он устанавливает флаг в файле make, который вы можете запрашивать в коде и фильтровать некоторые разделы в код.

Есть идеи, как обрабатывать что-то подобное в Android?

Обновление

Устройство

Устройство имеет некоторые аппаратные функции, такие как принтер, светодиоды, картридер EMV. Примерно так:

введите описание изображения здесь

SDK

Эти SDK импортируются как модули в проект, на них ссылается основной проект.

Интерфейсы

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

Что я хочу сделать.

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

Пример с препроцессорами.


#if defined(DEVICE1)
void printInvoice(char * msg){
   sdk_device1.print(msg);
}
#endif

#if defined(DEVICE2)
void printInvoice(char * msg){
   sdk_device2.print(msg);
}
#endif

Спасибо!

1 Ответ

1 голос
/ 17 июня 2020

Я бы подошел к проблеме следующим образом:

  1. Я бы определил ароматы продукта для каждой конфигурации оборудования
  2. Я бы связал конфигурации proguard для каждого заданного варианта с минимальной целью удалите все n-1 модули, которые не нужны, и оставьте последний, указанный c для сборки оборудования, сделано для
  3. Я бы включил proguard для сборок выпуска

... немного подумав:

Вам также понадобится какая-то фабрика, чтобы предоставить вам экземпляр sdk для определенного c вкуса (может быть что-то похожее на то, как мы определяем testInstrumentationRunner).

Если вы не используете proguard в своем решении (или любой другой альтернативе proguard), вы, вероятно, столкнетесь с проблемами при его внедрении, но в конце концов он вам все равно понадобится, поэтому время стоит потратить на их решение.

...