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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值