Enlace de datos de Android en el submodule

Tengo un module de aplicación, digamos "Prueba". El module "Prueba" depende de un submodule B. Ambos habilitan el data binding. En el module B de la biblioteca, creo una actividad simple usando el data binding, su propósito es la reutilización, por ejemplo: puedo crear una pantalla de inicio de session básica y usarla en muchas aplicaciones más adelante. A continuación se muestra el código de muestra en el Paquete B.

package com.test.packageb open class MainActivity : AppCompatActivity() { lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) } } 

y luego en el module "Prueba", simplemente puedo henetworkingar la class MainActivity para hacer cosas personalizadas, como esta:

 class MainActivity1 : MainActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } fun doSomething(){ binding.rootLayout.setBackgroundResource(R.color.colorPrimary) } } 

Sin embargo, cuando trato de ejecutar la aplicación "Test", recibí este error

Error: (17, 9) No se puede acceder a la class 'com.test.packageb.databinding.ActivityMainBinding'. Verifique el classpath de su module para detectar dependencies faltantes o conflictivas
Error: (17, 17) Referencia no resuelta: rootLayout

¿Qué me perdí? ¿Hay algo más que deba implementarse?

Aplicación de testing build.gradle

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.test.testapplication" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } dataBinding{ enabled true } buildTypes { debug { } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { kapt 'com.android.databinding:compiler:3.0.0-beta4' implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.0.2' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation project(':packageb') } 

Paquete B build.gradle

 apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } dataBinding{ enabled true } buildTypes { debug { minifyEnabled false } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { kapt 'com.android.databinding:compiler:3.0.0-beta4' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.0.2' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } 

No estoy seguro si el problema es relevante para usted, pero logré encontrar algún tipo de solución.

Para que funcione, la class base debe tener generics

 class A<BINDING extends ViewDataBinding> { protected ABinding binding; void init(){ binding = (ABinding) DataBindingUtil.setContentView(this, R.layout.a); } } 

y pasar el mismo enlace a la class secundaria del submodule

 class B<ABinding> { // you can use instance in this class } 

El problema principal aquí es que no se puede cambiar drásticamente la interfaz de usuario, solo se pueden ocultar elementos existentes o agregar nuevos en el time de ejecución. Pero supongo que en tal caso más fácil crear una class totalmente nueva.