Я создал пустой проект, чтобы опробовать компонент навигации. Я хотел посмотреть, как он будет себя вести с многомодульным проектом (один общий модуль с большинством зависимостей, плюс модули, которые будут содержать различные части приложения, и модуль :app
, который будет реализовывать все модули).
Gradle-файл верхнего уровня имеет такую зависимость:
dependencies {
classpath "com.android.tools.build:gradle:3.6.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0-alpha04"
}
Общий модуль имеет следующие зависимости (среди прочих):
dependencies {
…
api "androidx.navigation:navigation-fragment-ktx:2.2.1"
api "androidx.navigation:navigation-ui-ktx:2.2.1"
api "androidx.navigation:navigation-dynamic-features-fragment:2.3.0-alpha04"
…
}
И абсолютно все к модулям этот плагин применен сверху:
apply plugin: "androidx.navigation.safeargs.kotlin"
Теперь каждый «модуль пользовательского интерфейса» содержит фрагменты, и только в :app
реализуется main_graph.xml
, который ссылается на них. Примером может быть:
<fragment
android:id="@+id/registerFragment"
android:name="example.register.RegisterFragment"
android:label="RegisterFragment">
<action
android:id="@+id/action_registerFragment_to_loginFragment"
app:destination="@id/loginFragment" />
</fragment>
После того, как все это закончено, хороший проект Clean Project + Rebuild сделан.
Для меня это имеет смысл. Однако, когда я пытаюсь вызвать теоретически автоматически сгенерированный файл, RegisterFragmentDirections
не существует, ни в указанном подмодуле c, ни в основном. NavDirections
можно найти (поэтому зависимости как-то работают), но не сгенерированные.
Я попытался реализовать все зависимости в каждом модуле, откатив навигационную версию к предыдущим альфа-версиям. … Безуспешно.