Преобразование Android-проекта с привязкой данных от Java к Kotlin

У меня есть большой проект Android, написанный на Java, и в настоящее время я преобразовываю его в Kotlin. Многие из моих действий и фрагментов используют привязку данных.

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

kapt 'com.android.databinding:compiler:2.0.0-beta6' 

к зависимостям в app/build.gradle а также

 kapt { generateStubs = true } 

в тот же файл.

После создания активность Kotlin с привязкой данных работала, тогда как все остальные Java-привязки данных теперь сообщают, что ссылка на пакет привязки данных не существует.

Это оставляет меня в трудном положении. Я планировал преобразовать действия и фрагменты один за другим в Котлин и строить их, когда я иду, но в данный момент это кажется невыполнимым, так как я должен сделать выбор между Java или Kotlin, работающим при каждой сборке.

Я нашел Kotterknife: https://github.com/JakeWharton/kotterknife , который представляет собой библиотеку ввода-вывода для Kotlin, но я все еще не могу поверить, что нет возможности медленно преобразовывать ваши действия с Java в Kotlin, даже если они действительно используют привязки данных. Это просто не кажется мне правдоподобным.

Кто-нибудь сделал преобразованный проект таким образом в прошлом и преуспел, не делая выбор один или другой? Есть ли способ конвертировать отдельные действия по мере продвижения? Другой вариант состоит в том, чтобы просто преобразовать всю Java в Kotlin за один раз, а затем сделать одну единую сборку после ее завершения, но это кажется немного рискованным, если вы включите всю работу, а затем поймете, что упустили что-то. Есть идеи? Заранее спасибо.

Остерегайтесь сочетания Data Binding + Kotlin! Библиотека привязки данных внутренне использует Kotlin, и из этого возникают некоторые конфликты. Я бы посоветовал вам сохранить классы активности / фрагмента, которые используют привязку данных в Java, и преобразовать бизнес-логику в Kotlin. У меня было много проблем в довольно крупных проектах. Чем больше зависимостей, связанных с проектом, тем больше рисков. Продолжайте постепенно преобразовывать классы, никогда не сразу! Если вы конвертируете сразу несколько файлов, убедитесь, что ваша локальная или удаленная история не повреждена, чтобы при необходимости можно было восстановить. Несколько недель назад у меня возникла такая серьезная ошибка, из-за которой проект был невозможно построить. Некоторые действительно странные вещи можно ожидать. Также будьте осторожны с альфа-и бета-библиотеками и всегда обновляйте зависимости библиотек один за другим, чтобы как можно раньше уловить любую несовместимость. Надеюсь, это немного помогло.

EDIT : По состоянию на 20 мая 2017 года, я считаю, что большинство из вышеупомянутых проблем уже исправлены. Также Kotlin теперь является официальным языком, поэтому полная совместимость должна быть гарантирована и постоянно проверена компанией Google.

Intereting Posts
Kotlin от Java: поле nullable или нет? Как передать массив строк в намерение электронной почты Android Мои входы не распознаются Не удалось получить CoordinatorLayout LayoutParams в RecyclerView Повторная установка + повтор RxJava с другой ссылкой Исключение: blockingConnect не следует вызывать в потоке пользовательского интерфейса, несмотря на то, что я добавил другой поток Лотские свойства и значения Kotlin сброшены: сбрасываемый ленивый делегат Ошибка вывода типа: RecyclerViewActions.scrollTo () Android Studio 3.0 Kotlin не работает должным образом Anko 0.8 – ссылка на неразрешенные lparams модификатор lateinit не допускается на свойства примитивного типа в Котлине Kapt generatestubs – невозможно инициализировать объект с помощью внутреннего конструктора из unit-test Отсутствует конструктор для DialogPreference Нажмите элемент RecyclerView в ViewHolder Как заставить вызовы некоторым конструкторам / функциям использовать именованные аргументы?