私はちょうどアンドロイドスタジオ2.1に切り替えました、そして、以前に働いていたアプリをコンパイルしようとするとき、このエラーは現れました:
Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the 'Java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file.
メインプロジェクトのgradle.buildファイルは、Java 1.7コード生成を強制するようにすでに更新されています。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.1.0'
apply plugin: 'Java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
}
Javaのバージョンを設定するために、モジュールgradle.buildを次のように更新しました。
Android {
compileSdkVersion 19
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.abc.def"
minSdkVersion 19
targetSdkVersion 19
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
サブモジュールはMavenで構築されています。 pom.xmlファイルでは、1.7コード生成を強制しようとしました。
私は下位モジュールを組み込んだアセンブリ成果物を使用していることを理解していますが、下位モジュールのいずれも変更しておらず、最後にコンパイルしたときにそのモジュール用の.jarファイルが正常に実行されます。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId> <!-- maven-compiler-plugin -->
<version>2.6</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-Assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
私の質問:1)これはAndroid Studio 2.1の問題ですか?他の人がそれを見たことがありますか? 2)これが私のエラーであると仮定し、エラーメッセージが悪いモジュールを見つけるのに役立たないので、V52コードを見つけることに関する何かお勧めはありますか?大量のコードを壊さずにライブラリを省略することはできません。コードのリビジョンを見つけるために.jarファイルを調べることはできますか?前もって感謝します。 - ヘペストス
java 1.8をAndroid Studio 3.0以降で使用し、以下の作業を設定してください。最新のビルドツールが必要なようです。
classpath 'com.Android.tools.build:gradle:3.0.0'
そして
Android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
...
//jackOptions { // DEPRECATED
//enabled true
//}
}
dexOptions {
incremental true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Android固有ではないというJavaライブラリを持つモジュールがあるなら、これはうまくいくはずです:apply plugin:'Java'
Build.gradleファイルの先頭に配置してから、再構築してください。
apply plugin: 'Java'
apply plugin: 'jacoco'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.11'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
org.jetbrains:annotation:15
およびretrolambdaプラグインを使用している場合は、compile org.jetbrains:annotations:15.0
からbuild.gradle
行を削除するとエラーが消えます。わたしにはできる。
メインのbuild.gradleをセクションに追加してみてくださいallprojects
tasks.withType(JavaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
または依存関係にこれを追加してください
sourceCompatibility = 1.7
targetCompatibility = 1.7
すべてのモジュール手動で
私は以下の行を追加することによってこの問題を解決することができました:
jackOptions {
enabled true
}
build.gradle
ファイルのdefaultConfig
に。
あなたはリンク上のJava 8のためのガイドラインに従うことができます - https://developer.Android.com/guide/platform/j8-jack.html
おそらく、あなたの依存関係のいくつかは、特にAndroid用ではなく、Java 8でコンパイルされています。その依存関係を古いバージョンに切り替えてみてください。メインモジュールの依存関係のリストを添付していないので、どのライブラリをダウングレードするのか正確にはわかりません。
例:私は同じ問題を抱えていた。何時間も検索した結果、ライブラリorg.codehaus.httpcache4j.uribuilder:2.0.0
には github 以降のJava 8が必要であることがわかりました。だから、私が1.1.0
に切り替えたとき、プロジェクトはうまくビルドされデプロイされました。
私はgreendao-generator依存性についても同じ問題を抱えていました。誤ってその依存関係を私のbuild.gradle(compile 'org.greenrobot:greendao-generator:3.1.0'
)に追加したところ、AndroidStudioから同じエラーメッセージが表示されました。
おそらくそのモジュールはJava 8でコンパイルされているからです。
だから私は自分のbuild.gradleからその依存関係を取り除き、すべてうまくコンパイルしました:)
Gradleプラグイン2.2.2を使用してAndroid Studio 2.2のインスタントランをオフにすると、問題が解決しました。 Gradleプラグインの古いバージョン(2.2.0など)に切り替えても修正されていますが、それほど望ましくはありません。
私は以下のようにこの問題を解決しました:
apply plugin: 'Java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
これはAndroid Studio 2.3.3で私に起こりました。私が見つけた解決策はビルドフォルダを削除してからプロジェクトの再構築です。それはそれと同じくらい簡単でした。
いくつかのJAR依存関係を追加した後、私はAndroid 2.3.3
でも同じエラーに直面しました。問題は依存関係io.netty:netty-all:4.1.16.Final
が原因でした。この4.1.16バージョンのJARはJava 1.8でコンパイルされ、他のすべてはJava 1.7で生成されました。
私のbuild.gradle
ファイルに古いバージョンのnetty
(Java 1.7で生成されたもの)を含めた後、これは解決されます。
compile 'io.netty:netty-all:4.1.5.Final'
Android Studio 3.0でjdk 1.8によってコンパイルされたjarをインポートしようとしたときに、この問題に遭遇しました。上記の解決策をすべて試しましたが、うまくいきません。そのため、私はそのjarの開発者にjdk 1.7でそれを再コンパイルするように頼みました、そしてそれはそれからこの問題に再び遭遇しないで、うまくいきます。
可能であれば、
これで問題は解決します。
参照: https://developer.Android.com/studio/write/Java8-support
AndroidおよびRxJava 2用のReactive Location APIライブラリ で同じ問題に直面しています。build.gradleを3.0.1に更新し、 AndroidおよびRxJava 2用のReactive Location APIライブラリ = 1.0.4から1.0.3のライブラリバージョンそれは私の場合はうまくいきます。
Android Studio v 2.3.3でauto-value v 1.5にアップグレードしようとすると、この問題に遭遇しました。自動値1.5はおそらくAS 3と互換性があるでしょう(それは最新のJavaコンパイラを必要とします)
今のところ自動値1.4.1が動作します。