Недавно я начал погружаться в разработку 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
Форум для тех, кто программирует под Android
1722086188
Anonymous
Недавно я начал погружаться в разработку 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)
Подробнее здесь: [url]https://stackoverflow.com/questions/78799454/aosp-development-kotlin-cannot-access-r-class-id-but-java-can-why[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия