最近Amazon S3を触る機会があったのですが、そのときに遭遇したエラーについて。
Android全般の話でもあったんですが、S3で検索しても出てこなかったので書いておきます。
スポンサーリンク
アプリを実行しようとしたら「 Execution failed for task ':app:transformClassesWithDexForDebug'.」と表示
S3のライブラリを組み込んで、試しに実行してみようとしたところ
rror:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/amazonaws/auth/AwsChunkedEncodingInputStream;
が発生。
「Multiple dex files define」とあるので、どこかでライブラリが二重に読み込まれているのだろうと思うのですが、すぐに心当たりはありませんでした。
gradleとjarファイルで二重に読み込まれていた
いろいろ確認していったところ、ダウンロードしてプロジェクトに組み込んでいたjarファイルと、gradleのdependencies で「compile 'com.amazonaws:aws-android-sdk-s3:2.2.+'」と指定して取り込んでいたライブラリが衝突していたことがわかりました。同じライブラリを別々に読み込んでいたためですね。
なので、jarファイルを削除してやると動きました。
もうひとつの対応としては、compileの記述を外してjarを残しても良いと思います。このあたりはプロジェクトの方針によります。
gradleは自動的に依存関係を解決してくれる
gradleではデフォルトでjcenterリポジトリを参照して、compileの記述空依存関係を解決してくれます。
おそらく、いろいろやっているときに書いてしまったのが残ってしまっていたのでしょう。