При разработке моего приложения у меня возникает следующая ошибка:
Я создаю несколько приложений, используя некоторые библиотечные модули по умолчанию. Все эти библиотечные модули используют привязку данных и включают макеты и функции по умолчанию. Иногда мне необходимо изменить пользовательский интерфейс чего-либо, найденного в модулях библиотеки, и тогда у меня возникают проблемы.
Давайте представим следующий сценарий:
LibraryA:
AppB:
зависимость от LibraryA
привязка данных включена
Некоторая активность внутри AppB запускает LibActivityA, и все работает нормально (без изменений макета по сравнению с LibraryA)
Я делаю релиз apk и могу правильно его использовать
APPC:
зависимость от LibraryA
привязка данных включена
У меня есть запрос на перемещение элемента, найденного в layout_A.xml, в нижнюю часть экрана, скажем
Я создаю другой файл layout_A.xml (корневой тег есть) и настраиваю то, что нужно (сохраняя все остальные элементы, чтобы избежать ошибок времени выполнения).
Я запускаю приложение и во время выполнения получаю исключение приведения класса
Быстрый поиск Я обнаружил, что сгенерированное LayoutABinding находится в моем пакете приложения, поэтому я использую https://developer.android.com/topic/libraries/data-binding/generated-binding#custom_binding_class_names, чтобы переместить LayoutABinding в тот же пакет, который найден в LibraryA.
снова запустите приложение, и все в порядке, бутылки с шампанским вышли!
Нажмите Генерировать apk, чтобы выполнить сборку релиза, и получите следующую ошибку:
Не удалось выполнить задачу ': app: transformDexArchiveWithDexMergerForVariantStoreRelease'.
com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: ошибка при объединении декс-архивов:
Узнайте, как решить проблему в https://developer.android.com/studio/build/dependencies#duplicate_classes.
Тип программы уже представлен: com.company.librarya.databinding.LayoutABinding
Я искал весь StackOverflow и Интернет, и, похоже, никому не удалось успешно сделать то, что я хочу: переписать файл ресурсов из библиотеки, которая использует dataBinding, чтобы немного отличаться для некоторых приложений, использующих lib.
Перед использованием привязки данных все прошло гладко, действительно, я должен был убедиться, что findViewByIds не вернул null, и поэтому я мог использовать новые макеты.