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

ПРИМЕЧАНИЕ. Этот вопрос основан на ответах, которые я получил в следующем обсуждении:

Android: 2 библиотеки aar с одним и тем же пакетом

В своих проектах для Android я пытаюсь поддерживать несколько версий общей кодовой базы, используемой в разных библиотеках aar, которые должны компилироваться вместе в моем приложении. В настоящее время я делаю копии классов в общей кодовой базе, изменить имя их пакета и поместить их в каждую библиотеку, которую я создаю. В краткосрочной перспективе это позволяет каждой библиотеке компилироваться с уникальным именем пакета. Кроме того, если для классов в общей библиотеке требуется другая реализация, она это позволяет. В долгосрочной перспективе это создает очевидные проблемы с обслуживанием. Я пытаюсь создать решение, которое позволит мне скомпилировать несколько библиотек с разными версиями одной и той же кодовой базы.

Я пробовал следующий процесс:

  1. Скомпилируйте мою общую кодовую базу в библиотеке aar под названием «commonLib"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_0».

  2. Напишите библиотеку, используя libCommon"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_0, под названием «libA».

  3. Измените реализацию метода в общей кодовой базе, чтобы он включал другой код и, следовательно, другую версию — «comonLib"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_1».

  4. Напишите библиотеку, используя libCommon"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_1, под названием «libB».

  5. Создайте новое приложение, реализующее оба aars.

  6. При попытке скомпилировать приложение с шага 5 вылетает ошибка: "Program type already present: commonlib.mybcommonpackage.MyCommonClass".

Ошибка возникает из-за того, что компилятор не может скомпилировать два разных класса, используя одно и то же имя и один и тот же пакет. Мой вопрос касается лучшего способа сохранить эту ситуацию:

  1. Как правильно скомпилировать 2 разные библиотеки, которые используют одну и ту же общую библиотеку с разными реализациями?

  2. Учтите, что компилятор не может скомпилировать 2 разных класса с одинаковыми именами, как мне развернуть общую библиотеку в нескольких проектах?

ПРИМЕЧАНИЕ. Хотя в настоящее время я использую решение aar для развертывания своих библиотек, я также рассматриваю возможность изменить его на решение, которое поможет мне лучше поддерживать мой код в соответствии с потребностями, описанными в вопросе.


person Ariel Mann    schedule 20.08.2019    source источник
comment
я не уверен, как вы их реализуете. но эта ссылка может быть полезной. medium.com/mindorks/   -  person vikas kumar    schedule 20.08.2019