Недавно я начал погружаться в разработку AOSP и слежу за некоторыми лабораторными работами по коду, изначально написанными на Java, о том, как настроить SystemUI (для автомобильного AOSP).
Я проверил эти части CarSystemUI теперь использует Kotlin, и я хотел переделать эту лабораторную работу по коду.
Я следовал инструкциям и добавил codelab_layout.xml. Затем я обновил sysui_overlay_window.xml и добавил этот ViewStub:
Который объявляет идентификатор codelab_stub.
Загадка заключается в том, что на следующем шаге я должен добавить контроллер представления. В Java лаборатория кода просит добавить:
@SysUISingleton
public class CodeLabViewControllerJava extends OverlayViewController {
@Inject
public CodeLabViewControllerJava(
OverlayViewGlobalStateController overlayViewGlobalStateController) {
super(R.id.codelab_stub, overlayViewGlobalStateController);
}
}
который прекрасно компилируется. Однако, если я добавлю контроллер представления в Котлине, например:
@SysUISingleton
class CodeLabViewControllerKotlin @Inject constructor(
overlayViewGlobalStateController: OverlayViewGlobalStateController
) : OverlayViewController(R.id.codelab_stub, overlayViewGlobalStateController)
Я получаю следующую ошибку компиляции:
CodeLabViewControllerKotlin.kt:12:32: error: unresolved reference: codelab_stub
) : OverlayViewController(R.id.codelab_stub, overlayViewGlobalStateController) {
^
что меня сбивает с толку, поскольку код Java компилируется без проблем.
Есть идеи, почему это происходит?
PS: Если я заменю R.id.codelab_stub жестко закодированным Int, код Kotlin компилируется нормально.
Обновление:
Я считаю, что это проблема AAPT с Kotlin, потому что если я создам следующий класс Java:
package com.android.systemui.car.codelab;
import com.android.systemui.R;
public class KRes {
static class Id {
static final int codelab_stub = R.id.codelab_stub;
}
}
Затем следующий код компилируется нормально:
@SysUISingleton
class CodeLabViewController @Inject constructor(
overlayViewGlobalStateController: OverlayViewGlobalStateController
) : OverlayViewController(KRes.Id.codelab_stub, overlayViewGlobalStateController)
Подробнее здесь: https://stackoverflow.com/questions/787 ... va-can-why
AOSP Development: Kotlin не может получить доступ к идентификатору класса R, но Java может! Почему? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно запустить настроенный веб -сервер Development Studio Development
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-