gradle "Error: Program type already present: "
ライブラリのバージョン更新中に以下のようなエラーが出ました。
Error: Program type already present: android.arch.lifecycle.ViewModel
エラーについて
このエラーについて、Android Studio ユーザーガイド : 重複クラスエラーを修正する に説明があります。
Program type already present com.example.MyClass
このエラーは通常、以下のいずれかの状況で発生します。
・バイナリ依存関係に含まれているライブラリが、直接的な依存関係としてアプリにも含まれている場合。たとえば、アプリでライブラリ A とライブラリ B に対する直接的な依存関係が宣言されているものの、すでにライブラリ A のバイナリにライブラリ B が含まれている場合などです。この問題を解決するには、ライブラリ B を直接的な依存関係から削除します。
* アプリにローカル バイナリ依存関係があり、同じライブラリに対するリモート バイナリ依存関係も存在する場合。この問題を解決するには、バイナリ依存関係の一方を削除します。
例
build.gradle
ファイル
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
// 移行中の古い環境です
//ext.kotlin_version = "1.4.0"
ext.kotlin_version = "1.2.51"
repositories {
google()
jcenter()
}
dependencies {
// 移行中の古い環境です
//classpath "com.android.tools.build:gradle:4.0.1"
classpath "com.android.tools.build:gradle:3.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app/build.gradle
ファイル
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.gradleerrorsample"
minSdkVersion 24
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'android.arch.lifecycle:extensions:1.0.0'
}
Make Project
等、ビルドを行うと以下のようなエラーになります。
Error: Program type already present: android.arch.lifecycle.ViewModel
調査 1
該当するクラスを import してみました。
android.arch.lifecycle.ViewModel
は
android.arch.lifecycle:extensions:1.0.0
に定義されているようです。
調査 2
gradle app:dependencies
を実行し、依存関係を出力してみました。
151行目に android.arch.lifecycle:viewmodel:1.1.1
があります。
依存先をたどると com.android.support:appcompat-v7:28.0.0
が依存しています。
これにより、クラス名が衝突しているようです。
また、Lifecycle リリース # バージョン1.1.0 を参照すると、lifecycle:extensions はviewmodel を含めることをやめているようです。
対応
android.arch.lifecycle:extension:1.1.1
に更新して、ビルド自体は解決です。
その他
Android Gradle Plugin ( com.android.tools.build:gradle:
) を更新すると、このエラーは以下のように出力されます。
わかりやすくなってます。
(ライブラリの更新はまめにしましょう)
Author And Source
この問題について(gradle "Error: Program type already present: "), 我々は、より多くの情報をここで見つけました https://qiita.com/ykakizaki/items/3f01d9c335ded90a92c6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .