Возникла проблема недоступности идентификаторов элементов шаблона разметки в мультимодульном андроид-приложении, использующем 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'
Комментариев нет:
Отправить комментарий