マイプロジェクト構造
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で再現