Help us understand the problem. What is going on with this article?

Android 開発で使う JAR を生成する際の注意点

More than 5 years have passed since last update.


Java を利用した開発において、ある程度まとまった機能は JAR にすると管理が容易になります。

これは Android 開発においても同様のことが言えます。例えば 自作 ImageView を作成した時、ImageView を拡張したソースコードをそのままプロジェクトに入れておくよりも、パッケージにして切り離した方が、他のプロジェクトで利用したくなった時でも容易に使い回す事が出来ます。

しかし、JDK 8 環境において JAR を生成する時は、バージョンの差異に対する対策が必要となります。


IntelliJ IDEA を利用してコンパイルすると、JDK8 環境の場合は バージョン 1.8 のバイトコードを生成します。
しかし、この JAR を Android プロジェクトに含めてコンパイルすると

Error:Gradle: Execution failed for task ':app:preDexDebug'.
> org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-jdk/bin/java'' finished with non-zero exit value 1

これだけではコンパイラが異常終了したことしか分からないので、もう少し詳しく原因を追ってみると gradle:preDexDebug において

UNEXPECTED TOP-LEVEL EXCEPTION: bad class file magic (cafebabe) or version (0034.0000)



このエラーは、Android 自体が Java 1.7 までの対応であるために、Java 1.8 で生成されたバイトコードを利用できない事が原因です。

これを回避するには、FileSettings より設定画面を開き、Build, Execution, DeploymentCompilerJava CompilerProject bytecode version の値を空白から 1.7 に変更してからコンパイルします。

すると、コンパイル時にバージョン 1.7 のバイトコードを生成するため、Android プロジェクトでも利用できるようになります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away