Acabei de mudar para o Android Studio 2.1 e este erro apareceu ao tentar compilar um aplicativo que estava funcionando anteriormente:
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.
Eu já havia atualizado o arquivo gradle.build do projeto principal para forçar a geração do código 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
}
}
Eu também atualizei o módulo gradle.build da seguinte maneira para definir a versão java:
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
}
}
O submódulo sendo construído com Maven. No arquivo pom.xml, também tentei forçar a geração de código 1.7.
Eu entendo que estou usando um artefato de montagem, que incorpora módulos subordinados, mas não alterei nenhum dos módulos subordinados e o arquivo .jar resultante para o módulo funcionou bem da última vez que compilei.
<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>
Minha pergunta: 1) Este é um problema do Android Studio 2.1? Outros viram? 2) Presumindo que este seja meu erro e uma vez que a mensagem de erro não ajuda a encontrar o módulo defeituoso, há alguma recomendação sobre como encontrar o código V52? Não posso simplesmente omitir as bibliotecas sem quebrar uma grande quantidade de código. É possível inspecionar um arquivo .jar para encontrar a revisão do código? Desde já, obrigado. -Hefesto
fonte
Respostas:
basta usar java 1.8 com Android Studio 3.0+ e definir o seguinte funciona para mim: parece que preciso das ferramentas de compilação mais recentes
e
fonte
android.dexOptions.incremental
propriedade está obsoleta e não tem efeito no processo de construção."Se você tiver um módulo com uma biblioteca java que não seja específica do Android , isso deve funcionar:
apply plugin:'java'
Coloque-o no início do arquivo build.gradle e recompile.
fonte
Se você usar
org.jetbrains:annotation:15
um plugin retrolambda, remova a linhacompile org.jetbrains:annotations:15.0
do seubuild.gradle
e o erro desaparecerá. Funciona para mim.fonte
Possivelmente, algumas de suas dependências foram compiladas com Java 8, não especialmente para Android. Tente mudar essas dependências para uma versão mais antiga. Não sei exatamente qual biblioteca você deve fazer o downgrade, porque você não anexou uma lista de dependências do seu módulo principal.
Por exemplo: tive o mesmo problema. Depois de horas de pesquisa, descobri que a biblioteca
org.codehaus.httpcache4j.uribuilder:2.0.0
requer Java 8, a partir do github . Então, quando mudei para1.1.0
, o projeto foi construído e implantado com sucesso.fonte
Tente adicionar ao build.gradle principal na seção allprojects
ou adicione isso nas dependências
em todos os módulos manualmente
fonte
Consegui resolver esse problema adicionando as seguintes linhas:
para
defaultConfig
nobuild.gradle
arquivo.Você pode seguir as diretrizes para Java 8 no link - https://developer.android.com/guide/platform/j8-jack.html
fonte
Eu tive o mesmo problema com a dependência greendao-gerador. Eu adicionei por engano essa dependência em meu build.gradle (
compile 'org.greenrobot:greendao-generator:3.1.0'
) e o AndroidStudio me mostrou a mesma mensagem de erro.Provavelmente porque esse módulo foi compilado com Java 8.
Então, eu removi essa dependência do meu build.gradle e tudo compilou alegremente :)
fonte
Resolvi este problema da seguinte forma:
fonte
Desativar o Instant Run no Android Studio 2.2 com o plug-in Gradle 2.2.2 corrigiu isso para mim. Voltar para uma versão mais antiga do plug-in Gradle (como 2.2.0) também corrigiu, mas isso é menos desejável na hora.
fonte
Isso aconteceu comigo com o Android Studio 2.3.3. A solução que encontrei foi excluir a pasta de construção e, em seguida, Rebuild Project . Era tão simples quanto isso.
fonte
Eu também encontrei o mesmo erro
Android 2.3.3
, depois de adicionar algumas dependências JAR. O problema era devido ao dependênciaio.netty:netty-all:4.1.16.Final
. Este JAR versão 4.1.16 foi compilado com Java 1.8 e todos os outros foram gerados com Java 1.7.Isso foi resolvido, após incluir a versão mais antiga do
netty
(que foi gerada com Java 1.7) em meubuild.gradle
arquivo.compile 'io.netty:netty-all:4.1.5.Final'
fonte
Eu me deparei com esse problema ao tentar atualizar para o valor automático v 1.5 no Android Studio v 2.3.3. O valor automático 1.5 provavelmente será compatível com AS 3 (requer um compilador java atualizado)
Por enquanto, o valor automático 1.4.1 funciona.
fonte
Eu enfrento o mesmo problema com a biblioteca de APIs de localização reativa para Android e RxJava 2. Basta atualizar build.gradle para 3.0.1 e reduzir a biblioteca de APIs de localização reativa para Android e a versão da biblioteca RxJava 2 de 1.0.4 para 1.0.3. Funciona bem No meu caso.
fonte
Eu me deparei com esse problema ao tentar importar um jar compilado por jdk 1.8 no Android Studio 3.0. Tentei todas as soluções acima, mas nenhuma funcionou. então, pedi ao desenvolvedor desse jar para recompilá-lo com o jdk 1.7, e então funcionou bem, não encontrando esse problema novamente.
fonte
Se possível para você:
Isso deve resolver o problema.
Referência: https://developer.android.com/studio/write/java8-support
fonte