Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Недоступны идентификаторы элементов шаблона разметки в мультимодульном андроид-приложении c ButterKnife

Возникла проблема недоступности идентификаторов элементов шаблона разметки в мультимодульном андроид-приложении, использующем Fragment, Moxy, ButterKnife и т.д.

module_00_lib\src\main
es\layout\module_goods_toolbar.xml

module_00_lib\src\main
es\layout\module_00_fragment_recycler_list.xml




15.09.17 По подсказке добавляю код файлов скриптов сборки:
build.gradle
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1' } }
allprojects { repositories { jcenter() } }
task clean(type: Delete) { delete rootProject.buildDir }
module_00_lib\build.gradle
apply plugin: 'com.android.library' apply plugin: 'com.jakewharton.butterknife'
android { compileSdkVersion 26 buildToolsVersion "26.0.1"
defaultConfig { minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions { annotationProcessorOptions { arguments = [ moxyReflectorPackage : 'com.example.module_00_lib' ] } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
def support = '26.+' def retrofit = '2.3.0' def glide = '3.7.0' def moxy = '1.5.3' def butterKnife = '8.6.0'
dependencies { compile project (':_service_lib') compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso: espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile "com.android.support:appcompat-v7:$support" compile "com.android.support:recyclerview-v7:$support" compile "com.android.support:cardview-v7:$support" compile "com.android.support:support-v4:$support" compile "com.android.support:design:$support"
compile "com.squareup.retrofit2:retrofit:$retrofit" compile "com.squareup.retrofit2:converter-gson:$retrofit"
compile "com.github.bumptech.glide:glide:$glide"
compile "com.arello-mobile:moxy:$moxy" compile "com.arello-mobile:moxy-app-compat:$moxy" annotationProcessor "com.arello-mobile:moxy-compiler:$moxy"
compile "com.jakewharton:butterknife:$butterKnife" annotationProcessor "com.jakewharton:butterknife-compiler:$butterKnife"
compile 'com.google.code.gson:gson:2.7' testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-all:1.10.19' testCompile 'org.hamcrest:hamcrest-all:1.3' testCompile 'org.robolectric:robolectric:3.1-rc1' }
При этом если отказаться от ButterKnife, то всё работает.

А в MainActivity всё работает и с ButterKnife.
Что и где нужно изменить, чтобы ButterKnife во фрагменте заработал?


Ответ

ID в библиотеках да, не final, засим их и не применить. Стандартным способом.
Но в butterKnife для сих целей есть ещё один R class c названием R2. Т.е. при использовании разметки из библиотек делайте так:
BindView(R2.id.ID)
Также, согласно README, в ваших библиотеках надо добавить плагин в скрипт сборки модуля либы:
apply plugin: 'com.android.library' apply plugin: 'com.jakewharton.butterknife'

Комментариев нет:

Отправить комментарий