Androidのメーカー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の上の問題]

すべてのライブラリファイル@BindViewながら、バージョン9.0.0は、削減される@BindView(R.id.assertNum)変更@BindView(R2.id.assertNum)> R2 -すなわちR、。各ライブラリファイルは、R2を生成しますので、R2は、R2以下の現在のライブラリファイルのパッケージ名でなければなりません

私の最後のプロジェクトbutterknife構成

プロジェクトの的とのGradle

dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'
}
复制代码

ベースライブラリ的にGradleの

apply plugin: 'com.android.library'
...
dependencies {
    ...
    api 'com.jakewharton:butterknife:9.0.0'
}
复制代码

Gradleのフレームライブラリ(ライブラリはButterKnifeに有用であるが、注釈の内部で使用されていない、R2を生成する必要はありません)

apply plugin: 'com.android.library'

dependencies {
    ...
    api project(path: ':baselibrary')
}
复制代码

私のアサートの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'
}
复制代码

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の中に持っているjavaCompileOptionsし、compileOptionsそれ以外の場合は報告します、設定DexArchiveBuilderExceptionエラーを

Gradleの2.appを追加することはできませんapply plugin: 'com.jakewharton.butterknife'が、アプリが直接R.id使用しているため、ライブラリ・ファイルは、あなたは、追加したいのですが、R2は、ライブラリで使用します。

ます。https://juejin.im/post/5cef42bce51d45105d63a497で再現

おすすめ

転載: blog.csdn.net/weixin_34014277/article/details/91428446