У меня есть отдельная библиотека Android в отдельном проекте для приложения Android.Однако я связываю библиотеку напрямую (ссылаясь на библиотечный модуль напрямую по пути или сгенерированному AAR), я получаю следующую ошибку:
A problem was found with the configuration of task ':app:kaptDevelopDebugKotlin'.
> Cannot write to file '/home/m0skit0/Repos/repo/app-android/app/build/intermediates/data-binding/develop/debug/bundle-bin' specified for property 'dataBindingArtifactOutputDir' as it is a directory.
e: error: cannot access ActivityDeparturesBinding
class file for com.blablabla.databinding.ActivityDeparturesBinding not found
Consult the following stack trace for details.
com.sun.tools.javac.code.Symbol$CompletionFailure: class file for com.blablabla.databinding.ActivityDeparturesBinding not found
* What went wrong:
Execution failed for task ':app:kaptDevelopDebugKotlin'.
Это отображается сразу после задачи :app:transformDataBindingWithDataBindingMergeArtifactsForDevelopDebug
Однакокласс существует, с полным каноническим именем.Он принадлежит библиотеке и корректно автоматически генерируется (без каких-либо ошибок) процессором привязки данных Android в обоих проектах.Библиотека правильно компилируется.Больше нет трассировки стека, даже если компиляция выполняется с --stacktrace
.
. Я попытался связать библиотеку с компиляцией, реализацией и API, все с тем же результатом.
Версия Gradle - 4.4.
ОБНОВЛЕНИЕ:
Обновление до Gradle 5 не решило проблему.Переименование XML не решило проблему.
Я также обнаружил, что ошибка возникает, только когда я ссылаюсь на класс ActivityDeparturesBinding
в моем коде, даже если часть, на которую он ссылается, никогда не вызывается.Только импорт без ссылки на него не вызывает ошибку.
UPDATE2:
Это действие, использующее макет:
class DeparturesActivity : BaseVinPlateActivity<DeparturesViewModel, ActivityDeparturesBinding>() {
companion object {
fun getStartIntent(context: Context) = Intent(context, DeparturesActivity::class.java)
}
@Inject
override lateinit var viewModel: DeparturesViewModel
override val layout: Int = R.layout.activity_departures
override fun injectThis(component: ActivityComponent) {
component.inject(this)
}
override fun getToolbarTitleId(): Int = R.string.departures_title
override fun initializeDataBindings(dataBinding: ActivityDeparturesBinding) {
dataBinding.viewmodel = viewModel
}
}
abstract class BaseVinPlateActivity<T: BaseVinPlateViewModel, U: ViewDataBinding> : CompoundsBaseActivity() {
protected abstract var viewModel: T
protected abstract val layout: Int
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == BARCODE_RESULT_CODE_ACTIVITY && resultCode == Activity.RESULT_OK) {
val barcodeResult = data?.getStringExtra(BARCODE_RESULT_ACTIVITY)
viewModel.setBarcodeResult(barcodeResult)
}
}
override fun initializeView() {
super.initializeView()
val dataBinding = inflateDataBinding<U>(layout)
initializeDataBindings(dataBinding)
with (viewModel) {
setBindValidator(Validator(dataBinding))
loadData()
}
}
protected abstract fun initializeDataBindings(dataBinding: U)
}
Если я удаляюфункция initializeDataBindings()
, ошибка исчезла.Обратите внимание, что комментировать только тело функции недостаточно, мне пришлось удалить всю функцию.
Это пахнет как ошибка компилятора / инструментов.