Android Studio 3.3,组件化项目butterknife配置

我的项目结构

  • 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'
   ...
}
复制代码

注意

1.app的gradle中要有javaCompileOptionscompileOptions配置,否则会报DexArchiveBuilderException错误

2.app的gradle中可以不加apply plugin: 'com.jakewharton.butterknife',但是库文件中要加,因为app中直接使用R.id,但在库中要用R2.

转载于:https://juejin.im/post/5cef42bce51d45105d63a497

猜你喜欢

转载自blog.csdn.net/weixin_34014277/article/details/91428446