Autore Topic: Come importare un progetto android in un altro progetto  (Letto 1585 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come importare un progetto android in un altro progetto
« il: 18 Ottobre 2010, 13:21:51 CEST »
0
Con eclipse volevo creare un progetto libreria android da importare in un altro progetto android, per fare questo ho creato un progetto android e l'ho definito come libreria Pippo in eclipse
(dx sul prj -> properties -> Android -> ho spuntato is Library)

Poi dal mio prj android MiaApp ho aggiunto il prj Pippo in due punti:
- 1. nella java build path per farlo compilare
- 2. nel menu android -> add -> ho aggiunto la libreria

Eseguo l'emulatore e mi genera il seguente errore:

10-18 11:13:07.188: ERROR/AndroidRuntime(485): java.lang.NoClassDefFoundError: it.lib.Pippo

Eppure Pippo.java si trova nel progetto Pippo sotto il packace it.lib

Dove sbaglio?

grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come importare un progetto android in un altro progetto
« Risposta #1 il: 18 Ottobre 2010, 14:25:04 CEST »
0
I progetti android quando vengono generano un jar.
è necessario che tu referenzi il progetto intero. Nella schermata di Jaba Build Path devi andare nella scheda "Projects" e aggiungere il progetto che contiene la tua libreria.

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come importare un progetto android in un altro progetto
« Risposta #2 il: 18 Ottobre 2010, 14:40:18 CEST »
0
è quello che ho fatto al punto 1, scrivo in dettaglio quello che ho fatto al punto 1) soprariportato:
 a) dx prj
 b) properties
 c) java build path
 d) Projects
 f) ho aggiunto il progetto


Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come importare un progetto android in un altro progetto
« Risposta #3 il: 18 Ottobre 2010, 16:11:44 CEST »
0
Il problema si è risolto chiudendo l'emulatore e rilanciandolo, adesso quando lancio l'emulatore ho questo messaggio di errore:

 Could not find it.pippo.apk!

ho provato a cercare su internet ma per ora non ho risolto, qualcuno ha mai visto questo tipo di errore?

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come importare un progetto android in un altro progetto
« Risposta #4 il: 18 Ottobre 2010, 17:10:28 CEST »
0
Togliendo la spunta "Is library" dal progetto Pippo, viene creato l'apk del progetto Pippo e quindi quando eseguo l'emulatore non compare più il messaggio:

Could not find it.pippo.apk!

però appare il messaggio

java.lang.NoClassDefFoundError: it.lib.Pippo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come importare un progetto android in un altro progetto
« Risposta #5 il: 18 Ottobre 2010, 20:53:55 CEST »
0
Ovviamente deve essere una libreria.
La classe pippo è dichiarata come public?

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come importare un progetto android in un altro progetto
« Risposta #6 il: 19 Ottobre 2010, 00:03:51 CEST »
0
Ricky ho spuntato pippo come libreria e quando eseguo la mia app la console mi dice:
Could not find it.lib.pippo.apk
eppure se vado nella directory bin del prj pippo il file apk è presente
Mentre il logCat mi dice:
10-18 21:59:57.746: ERROR/AndroidRuntime(388): java.lang.NoClassDefFoundError: it.lib.Pippo
La classe pippo è pubblica e contiene un semplice attributo stringa con i metodi set e get

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come importare un progetto android in un altro progetto
« Risposta #7 il: 19 Ottobre 2010, 09:29:43 CEST »
+1
Ci sono riuscito!
Scrivo quello che bisogna fare magari può essere utile a qualcuno

I prj android di tipo libreria devono avere spuntata l'opzione "is library"
Nel manifest dei prj di library devono essere dichiarate le activity che verranno condivise (se ce ne sono altrimenti non toccate il file)

Il progetto che usa le librerie deve:
 - avere aggiunto le librerie nella schermata android che trovate  nel pannello proprietà del prj
 - deve avere linkati i sorgenti della libreria (dx sul prj -> java build path -> source -> link source)
 - nel manifest devono essere dichiarate le activity della libreria che importa (se ce ne sono altrimenti non toccate il file) specificando l'intero package della classe importata
Il progetto che usa le librerie NON deve avere le librerie che importa nel tab Projects del build path

C'è un esempio che mostra questa struttura, scaricatevi dalle api 8 i seguenti due progetti:
TicTacToeLib
TicTacToeMain


Le impostazioni che ho descritto sono state ricavate dal seguente link:
Developing In Eclipse, with ADT | Android Developers

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:Come importare un progetto android in un altro progetto
« Risposta #8 il: 20 Ottobre 2010, 09:52:32 CEST »
0
- deve avere linkati i sorgenti della libreria (dx sul prj -> java build path -> source -> link source)

Questo viene fatto in automatico quando referenzi la libreria tramite "dx sul progetto che usa la libreria -> Android -> Add... (library)".

Ultima informazione che mi ha fatto impazzire: il nome progetto libreria *non* deve contenere caratteri speciali! Avevo chiamato la libreria "MyApp-lib" e non funzionava nulla... l'ho rinominata in "MyAppLib" e magicamente funziona tutto!