2011-10-05 11 views
8

Quando pulisco il mio progetto ottengo il seguente errore:utilizzo sconsiderato o sbagliata di una classe principale (java * o javax *..) Quando non è la costruzione di una libreria di base

[2011-10-05 13:47:53 - The Basics] Dx 
trouble processing "java/nio/CharBuffer.class": 

Ill-advised or mistaken usage of a core class (java.* or javax.*) 
when not building a core library. 

Ciò è spesso dovuto includere inavvertitamente un file di libreria di base nel progetto dell'applicazione, quando si utilizza un IDE (come ad esempio Eclipse). Se sei sicuro di non definire intenzionalmente una classe principale , allora questa è la spiegazione più probabile di ciò che è attivo.

Tuttavia, si potrebbe effettivamente si stia tentando di definire una classe in uno spazio dei nomi nucleo , la fonte di cui si potrebbe aver preso, per esempio, da un progetto di macchina virtuale non-Android. Questo è il più sicuramente non funziona. Come minimo, compromette la compatibilità della tua app con le versioni future della piattaforma. Spesso è anche di legalità discutibile.

Se davvero intenzione di costruire una libreria di base - che è solo appropriata come parte della creazione di una macchina virtuale completa distribuzione, al contrario di compilazione di un'applicazione - quindi utilizzare il "--core-library" opzione per sopprimere questo messaggio di errore.

Se si va avanti e usare "--core-library", ma sono in realtà costruzione di un'applicazione, quindi sappiate che l'applicazione non riuscirà a costruire o eseguire, ad un certo punto. Si prega di essere preparato per i clienti arrabbiati che trovano, per esempio, che l'applicazione cessa di funzionare una volta che hanno aggiornato il loro sistema operativo . Sarai incolpato di questo problema.

Se si sta legittimamente utilizzando un codice che si trova in un pacchetto core , l'alternativa più semplice e sicura che si ottiene è il codice . Ovvero, sposta le classi in questione nello spazio dei nomi del tuo pacchetto . Ciò significa che non saranno mai in conflitto con le classi del sistema principale. JarJar è uno strumento che può aiutare lo in questo sforzo. Se scopri che non puoi farlo, allora è un'indicazione che il percorso su cui ti trovi alla fine sarà il a causare dolore, sofferenza, dolore e lamento.

[2011-10-05 13:47:53 - The Basics] Dx 1 error; aborting 
[2011-10-05 13:47:53 - The Basics] Conversion to Dalvik format failed with error 1 

risposta

1

L'IDE non è configurato correttamente. Assicurati che i tuoi script o IDE non passino rt.jar o android.jar a dx.

4

Ho avuto questo problema. Uso Maven per costruire i miei progetti Android. Il mio problema è stato causato da una delle mie dipendenze a seconda dei jar Android. Ho aggiornato il mio pom per escludere Android da quella dipendenza e questo lo ha risolto per me.

<dependency> 
     <groupId>org.reassembler</groupId> 
     <artifactId>synth-android</artifactId> 
     <version>2.5.8</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>junit</artifactId> 
       <groupId>junit</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>android</artifactId> 
       <groupId>android</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

Spero che questo aiuti qualcuno, ci ho messo un po 'per capire cosa stava succedendo.

+0

Grazie per questa risposta ... JUnit era quello che stava causando l'errore per me. – tantalum

2

Per il vantaggio di chiunque possa essersi imbattuto in questo problema, questo problema può essere causato dall'inclusione di una libreria meno recente come android.jar. La rimozione del file .jar da buildpath ti consentirà di compilare. In caso contrario, è possibile utilizzare il "jarjar" menzionato nel messaggio di errore per spostare il file .jar in un altro pacchetto.

+0

in breve, questo è corretto. potrebbe essere necessario prendere un paio di passaggi aggiuntivi, però. Upvoted! :) –

0

In Android Studio, avevo incluso i file jar java e javax nella mia cartella lib e c'erano delle dipendenze ad essi correlate (in build.gradle a livello di app). Li ho commentati.

//compile files('libs/ K java-rt-jar-stubs-1.5.0.jar') 
//compile 'javax.annotation:jsr250-api:1.0' 
//compile files('libs/javax. annotation.jar') 

Quindi sono andato a Project View e ho cancellato i file jar. C'erano alcune istanze legacy di java.awt.geom che dovevo eliminare, ma ho ricostruito il progetto e poi stavo bene.