ПРИМЕЧАНИЕ. Этот вопрос основан на ответах, которые я получил в следующем обсуждении:
Android: 2 библиотеки aar с одним и тем же пакетом
В своих проектах для Android я пытаюсь поддерживать несколько версий общей кодовой базы, используемой в разных библиотеках aar, которые должны компилироваться вместе в моем приложении. В настоящее время я делаю копии классов в общей кодовой базе, изменить имя их пакета и поместить их в каждую библиотеку, которую я создаю. В краткосрочной перспективе это позволяет каждой библиотеке компилироваться с уникальным именем пакета. Кроме того, если для классов в общей библиотеке требуется другая реализация, она это позволяет. В долгосрочной перспективе это создает очевидные проблемы с обслуживанием. Я пытаюсь создать решение, которое позволит мне скомпилировать несколько библиотек с разными версиями одной и той же кодовой базы.
Я пробовал следующий процесс:
Скомпилируйте мою общую кодовую базу в библиотеке aar под названием «commonLib
"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_0».Напишите библиотеку, используя libCommon
"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_0, под названием «libA».Измените реализацию метода в общей кодовой базе, чтобы он включал другой код и, следовательно, другую версию — «comonLib
"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_1».Напишите библиотеку, используя libCommon
"Program type already present: commonlib.mybcommonpackage.MyCommonClass"0_1, под названием «libB».Создайте новое приложение, реализующее оба aars.
При попытке скомпилировать приложение с шага 5 вылетает ошибка:
"Program type already present: commonlib.mybcommonpackage.MyCommonClass".
Ошибка возникает из-за того, что компилятор не может скомпилировать два разных класса, используя одно и то же имя и один и тот же пакет. Мой вопрос касается лучшего способа сохранить эту ситуацию:
Как правильно скомпилировать 2 разные библиотеки, которые используют одну и ту же общую библиотеку с разными реализациями?
Учтите, что компилятор не может скомпилировать 2 разных класса с одинаковыми именами, как мне развернуть общую библиотеку в нескольких проектах?
ПРИМЕЧАНИЕ. Хотя в настоящее время я использую решение aar для развертывания своих библиотек, я также рассматриваю возможность изменить его на решение, которое поможет мне лучше поддерживать мой код в соответствии с потребностями, описанными в вопросе.