概要
Android Studio 3にて、Jarファイルを読み込むとcheckDebugDuplicateCalssesエラーが出る。出ないようにしたい。
どうやらKotlinのモジュール等が、Android Studio3本体とそのjarファイルで重複しているらしいが、解決法がわからない。
どなたかご教授をお願いします。
環境
Android Studio 3.4
エミュレータ: Nexus 5X API 27
Visual Studio Code 1.25.1
Java jre 1.8.0_211
Java jdk 1.8.0_112 (1.12をダウンロードしたが使われていない)
Kotlin 1.3.30-release-170
コード
Empty Activity を作成、プロジェクト名"errortest"にて、C:\Users\(ユーザ名)\Documents\pros\and\test を所定フォルダとした。
言語はKotlin、対応デバイスはAndroid 5.0を選択。
① libsフォルダに、以下の内容をコンパイルした pack.jar という名前のファイルを保存した。(VSCを使用)
Kotlin
1package pack.age 2 3class c{ 4 fun f(x: Int) = x 5}
② app/bulid.gradle の最終行に、implementation files('libs/pack.jar')
と入力し、syncさせた。
(// 追加した箇所
という文章は、原コードには掲載されていないが、わかりやすくするために載せた)
gradle
1dependencies { 2 implementation fileTree(include: ['*.jar'], dir: 'libs') 3 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 4 implementation 'com.android.support:appcompat-v7:28.0.0' 5 implementation 'com.android.support.constraint:constraint-layout:1.1.3' 6 testImplementation 'junit:junit:4.12' 7 androidTestImplementation 'com.android.support.test:runner:1.0.2' 8 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 9 implementation files('libs/pack.jar') // 追加した箇所 10}
③ MainActivity.kt の内容を以下の通りに変更した。
Kotlin
1package com.example.errortest 2 3import android.support.v7.app.AppCompatActivity 4import android.os.Bundle 5import pack.age.c // 追加した箇所 6 7class MainActivity : AppCompatActivity() { 8 9 override fun onCreate(savedInstanceState: Bundle?) { 10 super.onCreate(savedInstanceState) 11 setContentView(R.layout.activity_main) 12 13 val c_ins = c() // 追加した箇所 14 val y = c_ins.f(100) // 追加した箇所 15 } 16}
Empty Activityは、初期設定の場合"Hello World !"が出力されるようになっているため、
エラーが起こらなければ、それが出力されるはず。
エラーメッセージ
syncするだけだとエラーは出ないが、Runすると以下のエラーが出る。
Bulid Output内の、Run tasksの**:app:checkDebugDuplicateClasses**にてエラーが出ている。そのエラーは以下の通りである。
Error
1org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:checkDebugDuplicateClasses'. 2 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:95) 3(略) 4Caused by: com.android.ide.common.workers.WorkerExecutorException: 1 exception was raised by workers: 5java.lang.RuntimeException: Duplicate class kotlin.ArrayIntrinsicsKt found in modules kotlin-stdlib-1.3.31.jar (org.jetbrains.kotlin:kotlin-stdlib:1.3.31) and pack.jar (pack.jar) 6Duplicate class kotlin.BuilderInference found in modules kotlin-stdlib-1.3.31.jar (org.jetbrains.kotlin:kotlin-stdlib:1.3.31) and pack.jar (pack.jar) 7(略) 8Go to the documentation to learn how to Fix dependency resolution errors. 9 at com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable.run(CheckDuplicateClassesDelegate.kt:132) 10(略)
2500行余りあり、Exclude等では対応できなさそうに見える。
全てのDuplicate classは **kotlin.***という形式だったため、それらをpack.jarから読み込まないようにすれば良さそうだが、方法がわからない。
また、:app:checkDebugDuplicateClassesの下段タブにも"Execute Action"というタブがある。そこのエラーは以下の通りである。
Error
1Cause 1: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Duplicate class kotlin.ArrayIntrinsicsKt found in modules kotlin-stdlib-1.3.31.jar (org.jetbrains.kotlin:kotlin-stdlib:1.3.31) and pack.jar (pack.jar) 2Duplicate class kotlin.BuilderInference found in modules kotlin-stdlib-1.3.31.jar (org.jetbrains.kotlin:kotlin-stdlib:1.3.31) and pack.jar (pack.jar) 3(略) 4Go to the documentation to learn how to Fix dependency resolution errors. 5 at com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable.run(CheckDuplicateClassesDelegate.kt:132) 6(略)
追記(2019/5/9)
以下の方法でエラーが起こらず、動くようになりました。
しかしながら、これはLibsフォルダを使ったやり方ではないため、回答済にはしないでおきます。
Libsフォルダが用意されているのに使えないというのは変わらないので……。
① File → New → New module にて、Import .JAR/.AAR Package を選択し、ファイル名を入力してFinishする。
② File → Project Structure にて、appを押して、"Declared Dependencies" の左上の+ボタンを押して、3 Module Dependency を選択して、①で作ったモジュールを読み込む。
また、Android Studioのウィンドウを閉じて再度開くと、なぜかモジュールが読み込まれていないという問題が起こりましたが、これはProject Structureを開き、追加したモジュールを消して、Syncして再び開いてモジュールを追加することで解決しました(ウィンドウを開くたびにこれを行わなければなりません)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。