Quando si tenta di esportare il mio apk con Proguard ricevo un sacco di errori (più di 400) simili a:Problemi di Proguard con i file jar, come trovare il vaso mancante?
Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper
e
org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource
Sto usando il Jackson Json library, e gli errori sembrano correlate a tale.
ricerca di questo errore che ho trovato quanto segue da Proguards FAQ:
Se non ci sono riferimenti non risolti a classi o interfacce, molto probabilmente dimenticato di specificare una libreria essenziale. Per un'elaborazione corretta, è necessario specificare tutte le librerie a cui fa riferimento il codice, inclusa la libreria di runtime Java. Per specificare le librerie, utilizzare l'opzione -libraryjars.
cercare in giro su SO ho trovato un sacco di domande senza risposta relativi a questo, ma il senso generale è che il file jar sto usando (in questo caso Jackon JSON) si basa su più librerie e hanno bisogno di essere aggiunto al file di configurazione di Proguard un po 'come.
Tuttavia, non riesco a capire come determinare quali vasi sono necessari e dove sono. Gli avvertimenti parlare di un sacco di diversi pacchetti, come javax.ws.rs.ext, org.joda.time, org.codehaus.stax2, javax.xml.stream, ecc
- Come faccio a determinare che cosa barattoli contenere quei pacchetti? Ad esempio, quale jar è richiesto per le classi javax.ws.rs.ext. **?
- Come faccio a capire dove sono quei vasi e quale percorso sarebbe usato con i -libraryjars in Proguard?
Grazie molto
Edit: si dovrà ricordare che sto usando un Android Library Project configurazione. I vasi sono nel progetto principale della Libreria e il progetto di lavoro effettivo ha i loro percorsi di costruzione, inclusi i vasi nel progetto Libreria. Non so se questo faccia la differenza, ma ho pensato di doverlo menzionare.
Aggiornamento solo per testare, ho eliminato completamente la Jackson lontano dal percorso di generazione e dal mio codice e ora Proguard completata correttamente. Le domande rimangono ... Qual è l'approccio corretto per gestire questi errori?
Condivide la procedura guidata di esportazione Android in Eclipse aggiungere automaticamente il/lib/barattoli per Proguard o fare tutti devono essere aggiunte manualmente nel file di configurazione Proguard come questo:
-libraryjars C:/Project/lib/somjar.jar
ho provato che per la Jackson uno, ma non ha fatto alcuna differenza. Questo significa che devo anche trovare tutti i barattoli necessari per le classi menzionate negli avvertimenti e aggiungerli? Sarebbero nel sdk o nell'installazione di java?
Scusate se queste sono domande stupide, ma ho cercato di capirlo per le ultime due ore e non ho idea di cosa fare.
Grazie ancora
aggiornare nuovamente
Quindi più cercando, in combinazione con il suggerimento di Benjamin, ho trovato alcune delle classi mancanti erano in rt.jar, che si trova nella cartella lib del JDK . Così ho finito per l'aggiunta di
-libraryjars <java.home>/lib/rt.jar
Per il file proguard.cfg e ha portato gli avvertimenti da 485 fino a 204. Hey Direi che è una cosa ... I restanti avvertenze descrivono le classi che non riesco a trovare a tutti. L'app funziona perfettamente senza eseguire proguard, quindi queste classi devono essere in qualche posto giusto? O sono questi avvertimenti che dovrei usare -dontwarn
con?
Le restanti classi sono in questi pacchetti:
org.joda.time.
org.codehaus.stax2.
javax.ws.rs.
Così ora ho solo bisogno di un modo per capire:
- Cosa vasetti hanno queste classi
- Dove sono questi vasi in modo da può includerli nel file di configurazione proguard
La prima pagina di Jackson che si collega specificamente afferma che Jackson ha una dipendenza esterna ** zero **. Sei sicuro che il problema sia con Jackson JSON? – SyntaxT3rr0r
@Syntax, questo è quello che pensavo, ma tutti gli avvertimenti 485 sono * org.codehaus.jackson.qualcosa: impossibile trovare la classe di riferimento qualcosa.else * Nessuna delle altre librerie che sto usando fornisce avvertimenti. In risposta alla tua domanda però, no non sono sicuro che il problema sia con Jackson. Non ho altri lead a questo punto. – cottonBallPaws