Autore Topic: libreria jar con res/*  (Letto 1083 volte)

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
libreria jar con res/*
« il: 10 Maggio 2011, 14:18:48 CEST »
0
ciao a tutti.

ho creato un progetto android del quale esporto la directory src come file jar, ottendendo così una "libreria".
il mio problema nasce nel momento in cui all'interno della libreria faccio riferimento a risorse xml, posizionate nella directory res... eccezioni mi segnalano confliti.

per prima cosa ho trovato che molti creano un progetto java e, includendo poi android.jar, ottendo lo stesso obiettivo.
un primo dubbio al riguardo però è: perdendo la "struttura android" dei file, dove va a finire ad esempio R.java...

ho trovato in giro indicazioni che suggeriscono di compilare il jar utilizzando aapt, possibile?

mi viene in mente, se possibile, di chiedere a MarcoDuff (se passi da queste parti batti un colpo!) che, con la sua AboutActivity, ha probabilmente una soluzione al mio problema.

grazie mille.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:libreria jar con res/*
« Risposta #1 il: 10 Maggio 2011, 14:32:25 CEST »
0
ho creato un progetto android del quale esporto la directory src come file jar, ottendendo così una "libreria".
il mio problema nasce nel momento in cui all'interno della libreria faccio riferimento a risorse xml, posizionate nella directory res... eccezioni mi segnalano confliti.

Per risolvere il problema dei file XML dovresti abbandonare la definizione dichiarativa dei layout e passare integralmente a quella programmatica. Che poi credo sia quello che ha usato Marco nella sua AboutActivity.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:libreria jar con res/*
« Risposta #2 il: 10 Maggio 2011, 15:44:21 CEST »
0
Per usare le risorse di una libreria non puoi usare il jar.

Leggi questa guida: Managing Projects from Eclipse with ADT | Android Developers

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #3 il: 10 Maggio 2011, 16:17:19 CEST »
0
Per usare le risorse di una libreria non puoi usare il jar.

Leggi questa guida: Managing Projects from Eclipse with ADT | Android Developers

ok, fatto...

solo una cosa:
io nel mio progetto libreria includevo (a sua volta) dei jar che l'applicazione finale vedeva correttamente.
adesso, con Library Project, non me li vede più... sono costretto ad includerli sia nella libreria che nella applicazione?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:libreria jar con res/*
« Risposta #4 il: 10 Maggio 2011, 16:27:47 CEST »
0
No, è strano che non te li vede?

Prova questo:
- copia i jar nella cartella libs (sta allo stesso livello di res o assets);
- pulsante destro sulla libreria appena copiata e "Build path" -> "Add to build path".

Ciao

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #5 il: 10 Maggio 2011, 16:47:16 CEST »
0
No, è strano che non te li vede?

Prova questo:
- copia i jar nella cartella libs (sta allo stesso livello di res o assets);
- pulsante destro sulla libreria appena copiata e "Build path" -> "Add to build path".

Ciao

aspetta, non ho capito... nella libreria o nell'applicazione?

io fino ad adesso avevo:
libreria: in .classpath un <classpathentry kind="src" path="path/to/external.jar" />
applicazione: in .classpath un <classpathentry kind="src" path="path/to/libreria.jar" />

quindi l'applicazione accedeva alle classi di libreria.jar e, di conseguenza, tutte quelle di external.jar.

adesso invece:
libreria: in .classpath un <classpathentry kind="src" path="path/to/external.jar" />
applicazione: in .default.properties ho android.library.reference.1=path/to/library/project

e l'applicazione non vede più external.jar, praticamente...

la modifica che mi suggerisci coinvolge la libreria o l'applicazione?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:libreria jar con res/*
« Risposta #6 il: 10 Maggio 2011, 16:56:22 CEST »
0
Solo la libreria.

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #7 il: 10 Maggio 2011, 17:13:54 CEST »
0
non è cambiato molto...
mi restituisce ancora errori dovuti alla libreria inclusa nell'applicazione che non vede la libreria esterna (inclusa a sua volta)... insomma, hai capito :)

edit:
sembra che l'applicazione non sia in grado di risolvere un import della libreria (in quanto il relativo jar è incluso nella libreria e non nell'applicazione).
« Ultima modifica: 11 Maggio 2011, 12:09:20 CEST da lo »

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #8 il: 11 Maggio 2011, 12:24:19 CEST »
0
sembra che l'applicazione non sia in grado di risolvere un import della libreria (in quanto il relativo jar è incluso nella libreria e non nell'applicazione).

scusate, siamo sicuri che nel mio caso (il progetto "libreria" usa un jar) non sia necessario importare la libreria della libreria anche nell'applicazione?
grazie ancora...

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #9 il: 12 Maggio 2011, 17:56:52 CEST »
0
dovrei aver risolto! :-P

ho seguito queste "considerazioni" che indicano in modo sufficientemente chiaro cosa fare/non fare.

nel mio caso, il jar del "library project" non viene visto dall'applicazione principale finchè non viene "linkato" esplicitamente; attenzione, non va re-importato!
Citazione
A library project can include a JAR library
You can develop a library project that itself includes a JAR library, however you need to manually edit the dependent application project's build path and add a path to the JAR file.

inoltre è necessario fare attenzione ai conflitti fra i nomi delle risorse; è bene aggiungere un prefissio (ad esempio un semplice "library_") a quelle del "library project":
Citazione
Use prefixes to avoid resource conflicts
To avoid resource conflicts for common resource IDs, consider using a prefix or other consistent naming scheme that is unique to the project (or is unique across all projects).

grazie a tutti... ;-)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:libreria jar con res/*
« Risposta #10 il: 12 Maggio 2011, 19:25:50 CEST »
0
Quindi adesso hai:

- Progetto principale che ha nelle properties android il link ad una libreria android e in build il riferimento al jar X esterno
- Progetto libreria android che ha in build il riferimento al jar X esterno

giusto?

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:libreria jar con res/*
« Risposta #11 il: 13 Maggio 2011, 09:58:53 CEST »
0
no, non esattamente.

library project:
  • in .classpath un entry di tipo "lib" che riferisce il jar esterno (copiato in libs/)
  • in default.properties la riga android.library=true
applicazione:
  • in default.properties la riga android.library.reference.1=<path/to/library_project>
  • in .project un elemento xml che riferisce la directory src/ del library project
  • in .classpath:
    • una entry di tipo "src" che riferisce anch'essa la directory src/ del library project
    • una entry di tipo "lib" che riferisce il jar esterno del library project

insomma... un bel po' di roba!