2015-09-28 27 views
7

sto diventando un molto insolito, ClassNotFoundException all'avvio app per la mia classe com.xyz.sample.QuickSampleApplication quando si utilizza "fornito progetto" nello script delle dipendenze gradle OPPURE un altro errore Errore di traduzione non rilevato: java.lang.IllegalArgumentException: già aggiunto: quando si utilizza "compile project" nelle dipendenze gradle.Android, ClassNotFoundException quando si utilizza "fornito progetto" O IllegalArgumentException: già aggiunto, quando si utilizza "compilazione progetto"

errore effettivo:

E/AndroidRuntime(17749): java.lang.RuntimeException: Unable to instantiate application com.xyz.sample.QuickSampleApplication: 

java.lang.ClassNotFoundException: Didn't find class 

"com.xyz.sample.QuickSampleApplication" on path: DexPathList[[zip file 

"/data/app/com.uei.sample.library-2.apk"],nativeLibraryDirectories=[/data/app- 

lib/com.uei.sample.library-2, /vendor/lib, /system/lib]] 

Progetto Spiegazione:

Il com.xyz.sample.QuickSampleApplication viene utilizzato da com.xyz.sample.QuickSampleActivity, ed entrambi le classi sono nello stesso pacchetto com.xyz.sample.

Il com.xyz.sample.QuickSampleApplication utilizza un JAR chiamato 'quicksdklibrary', che ho inserito come una "dipendenza fornita" in Gradle, vedere frammento Gradle di seguito:

dependencies { 
    provided project(':quicksdklibrary') 
    //OR provided fileTree(dir: 'libs/MyExternalLibs', include: '*.jar') 
    compile 'com.android.support:appcompat-v7:21.0.0' 
} 

Il JAR risolve in IDE, genera senza errori e le classi interne del JAR sono visibili alle mie classi app come:

com.xyz.sample.QuickSampleApplication O com.xyz.sample.QuickSampleActivity.

Sia com.xyz.sample.QuickSampleApplication E com.xyz.sample.QuickSampleActivity sono dichiarati/farro correttamente nel AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.xyz.sample.library" 
     android:versionCode="1" 
     android:versionName="1.0.002"> 
    <uses-sdk android:minSdkVersion="19" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:name="com.xyz.sample.QuickSampleApplication"> 
     <activity android:name="com.xyz.sample.QuickSampleActivity" android:screenOrientation="portrait" 
        android:label="@string/app_name" android:launchMode="singleTask"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


    </application> 
</manifest> 

Quando ho aperto il file .apk effettivo generato ho trovato che le mie classi di com.xyz ... non sono state confezionate in .apk, perché ???

ho cercato tra cui l'origine in modo esplicito nel tag dipendenze da:

compile fileTree(dir: 'src/main/java', include: ['*']) 

O

compile fileTree(dir: 'src/main/java/com/xyz', include: ['*']) 

O

compile fileTree(dir: 'src/main/java/com/xyz', include: ['*.java']) 

O

compile fileTree(dir: 'src/main/java', include: ['*.java']) 

O

compile file(libs/quicksdklibrary.jar) 

Sulla base di commenti provato anche utilizzando sourceSets tag:

O utilizzando sourceSets tag:

sourceSets { 

     main{ 
      java { 
       java.srcDirs 'src/main/java' 
      } 

     } 

    } 

O

sourceSets { 

     main{ 
      java { 
       java.srcDirs 'src/main/java/com/xyz' 
      } 

     } 

    } 

Tuttavia il generato". apk "lo fa ancora non contiene il com.xyz pacchetti classe ...

Ultimo aggiornamento sul problema, vedere qui sotto:

tentativo Alternativa # 1:

Quando uso questo tag nel mio Gradle

dependencies { 
    compile 'com.android.support:appcompat-v7:23.0.1' 

    provided project(':quicksdklibrary') 
} 

tanto sono ClassNotFoundException (ispezionare la classe classes.dex apk & conferma la mia quicksdk classi della libreria non vengono inclusi), però quando uso:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    // OR compile files(libs/:quicksdklibrary.jar) 
    // OR compile project(':quicksdklibrary') 
    compile 'com.android.support:appcompat-v7:23.0.1' 

} 

Allora ottengo questo altro errore, che abituato anche mi permetta di distribuire/installare l'apk:

: app: preDexDebug

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/ACEUtils$Creator; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AEUtils; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AEngine; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/ATag; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/ABehavior; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AContext; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AControl$List; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AControl; 

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/xyz/ace/AData; 

UNEXPECTED TOP-LEVEL EXCEPTION: 

Error:Execution failed for task ':app:preDexDebug'. 

com.android.ide.common.process.ProcessException: 

org.gradle.process.internal.ExecException: Process 'command 'C:\Program 
Files\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 2 

** tentativi alternativi: **

ho davvero controllato l'intero progetto e anche ricreato il progetto più volte al fine di assicurarsi che ero n OT compreso questo JAR diverse volte, ma sto ancora ricevendo il "errore non rilevato traduzione: java.lang.IllegalArgumentException: già aggiunto ..." stesso errore

Ho anche reinstallato Android SDK, e anche aggiornare il mio JDK a jdk1.7.0_80, tuttavia sto ancora ricevendo questo errore.

Guardo altri post su StackOverflow menzionando che dovrei rimuovere il riferimento per supportare la versione 4 o 7 della libreria, che ho anche provato.

Altri tentativi:

ho controllare anche la JAR reale per vedere se sono stati creati più classi con lo stesso nome nello stesso pacchetto, che non lo sono.

Ho anche provato ad aggiungere una versione offuscata, che avrà nomi di classi diversi, ma la versione offuscata del JAR ha avuto l'errore "Uncaught translation error: java.lang.IllegalArgumentException: già aggiunto: .." errore !!!

Domanda:

Come posso risolvere questo "errore non rilevato traduzione: java.lang.IllegalArgumentException: già aggiunto:" , perché app: preDexDebug penso che ci sia la versione più delle mie classi o tentativi aggiungere più versioni ???

Grazie un milione a tutti!

+0

sembra che sia stato aggiunto al progetto, quindi già aggiunto, e che le classi non siano disponibili per le classi dell'app. So che dichiari che sono accessibili, ma vorrei ricontrollare l'ambito del tuo quicksdklibrary. –

risposta

0

Può essere avete aggiungere biblioteca due volte come:

  1. dipendenza
  2. nella cartella della libreria

Non farlo. Invece, mantieni uno dei due in questo modo. I mezzi per rimuovere il file jar dalla cartella della libreria funzioneranno meglio.

+0

Sì, l'attività JAR era per qualche motivo sconosciuto l'aggiunta di file di classe due volte, al pacchetto JAR così ho usato duplicate = "preserve" e update = attributi "veri" che impediscono i duplicati. '' – cyber101

2

Ho avuto lo stesso problema, ma la risposta era correlata alla libreria di supporto.

compile 'com.android.support:appcompat-v7:21.0.0' 

Provare a creare una nuova applicazione senza libreria di supporto, o semplicemente provare a rimuovere su questo e vedere cosa succede.

UPDATE (si dovrebbe anche controllare se questo è lì):

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 
    } 
} 
+0

grazie per l'aiuto, ma questo non era correlato nel mio caso. Nel mio caso le classi src non vengono JARed, ma solo quando includo un file JAR esterno. Non ci sono altri errori. – cyber101

+0

Ho aggiornato la risposta, provo a guardare lì –

+0

Si prega di vedere sopra per l'ultimo aggiornamento su questo problema – cyber101

Problemi correlati