我的项目结构
base-library
是最底层的库文件frame-library
依赖base-library
,是我的项目的库文件my-assert
是其中一个组件,也是一个库app
也是其中一个组件,但又是最终运行的项目,所以它除了要依赖项目的库文件frame-library
还要依赖其他所有组件,比如my-assert
组件- 另外我的Android Studio版本是3.3,项目的 compileSdkVersion是28
之前项目中用到的butterknife
版本是7.0.1,它在apply plugin: 'com.android.application'
项目中直接使用,但是现在我的组件库也需要使用,在apply plugin: 'com.android.library'
就也使用butterknife
,一直报错attribute value must be constant
升级
butterknife
到最新10.1.0
新的问题,报错Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory)
,于是参考(github.com/JakeWharton…)[github上issue]
将版本降为9.0.0,同时库文件中@BindView所有的
@BindView(R.id.assertNum)
改为@BindView(R2.id.assertNum)
,即R-->R2。不过R2一定是当前库文件包名下面的R2,因为每个库文件都会生成一个R2
最后我的项目butterknife配置
project的gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'
}
base-library的gradle
apply plugin: 'com.android.library'
...
dependencies {
...
api 'com.jakewharton:butterknife:9.0.0'
}
frame-library的gradle(这个库有用到ButterKnife,但是没有用到里面的注解,所以不需要生成R2)
apply plugin: 'com.android.library'
dependencies {
...
api project(path: ':baselibrary')
}
my-assert的gradle(这个库需要生成R2)
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
dependencies {
...
api project(path: ':framelibrary')
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0'
}
app的gradle(不需要生成R2)
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.versions['compileSdkVersion']
buildToolsVersion rootProject.ext.versions['buildToolsVersion']
defaultConfig {
applicationId "com.shineex"
minSdkVersion rootProject.ext.versions.minSdkVersion
targetSdkVersion rootProject.ext.versions.targetSdkVersion
versionCode rootProject.ext.versions.versionCode
versionName rootProject.ext.versions.versionName
flavorDimensions "versionCode"
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
...
dependencies {
api project(path: ':framelibrary')
implementation project(':modules:myAssert')
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0'
...
}
注意