Italian Caricamento automatico librerie

Fulvio75

Well-Known Member
Licensed User
Ciao, come si fa a caricare in automatico delle librerie da codice senza andare a fleggarle nel gestore librerie?
 

Fulvio75

Well-Known Member
Licensed User
Se intendi farlo in maniera condizionata, a runtime, non credo si possa.
Puoi usare la direttiva di compilazione:

#AdditionalJar

ma tanto vale selezionarle.
no quando carico il progetto, ho un modulo Funzioni che ha bisogno di alcune librerie e sono sempre uguali
 

Fulvio75

Well-Known Member
Licensed User
Giusto così anziché selezionarle scrivo quello nel modulo per ogni libreria che utilizza il modulo e tutte le volte che importo il modulo in un progetto carica quelle 5 librerie che utilizza
 

giannimaione

Well-Known Member
Licensed User
Longtime User
No, quelle direttive (#xxxx: ) vanno scritte per forza nel Main.
altrimenti crei una b4xlib e ti togli il pensiero.
in altri linguaggi (vedi dart/flutter), devi includere le librerie in ogni modulo!
moduloA: include libA, libC, libZ
moduloB: include libA, libT, libZ

una gran rottura
 

LucaMs

Expert
Licensed User
Longtime User
altrimenti crei una b4xlib e ti togli il pensiero.
Ho fatto una provoletta al volo (che non sa di formaggio, purtroppo ?)

Ho scritto un semplice file di testo, Manifest.txt, zippato e dato estensione .b4xlib (che è il facilissimo modo per creare questo tipo di librerie, solo che in questo caso... totalmente senza codice utile, classi/moduli, insomma file .bas).

Il Manifest ha solo questa riga:
B4X:
B4J.DependsOn=JavaObject

Dato un nome a questa meravigliosa libreria b4xlib ?, ImportLibs.b4xlib, ho creato un nuovo progetto B4J.
Utilissimo codice sorgente:
    Dim o As JavaObject
    o = Null
    Log(o)
Si può vedere che selezionando questa libreria (ovvero importandola) MA NON la libreria JavaObject, l'editor non segnala errori, il tipo JavaObject viene subito riconosciuto, proprio come se avessi importato quest'ultima libreria.

1710416729776.png


Insomma, a parte il fatto che creare template di progetto è molto utile (e facile), per ottenere ciò che Fulvio chiedeva, si può fare semplicemente in questo modo, crei un Manifest.txt che contenga solo l'elenco delle librerie necessarie, ne fai una b4xlib e fine.
 

Fulvio75

Well-Known Member
Licensed User
???non ho capito nulla...
Quindi Manifest.txt diventa uno zip?
E poi lo rinomino ImportLibs.b4xlib?
Dentro ha B4J.DependsOn=JavaObject
Con il nome delle librerie?
 

giannimaione

Well-Known Member
Licensed User
Longtime User
@Fulvio75
mattiniero!

prosegui in questo modo:
prendi una libreria b4xlib e la scompatti così ti rendi conto di cosa contiene;
in pratica è un file zippato (invece di essere un .zip è un .b4xlib)
ad esempio, puoi vedere la lib B4XTable.b4xlib
 

LucaMs

Expert
Licensed User
Longtime User
???non ho capito nulla...
Quindi Manifest.txt diventa uno zip?
E poi lo rinomino ImportLibs.b4xlib?
Dentro ha B4J.DependsOn=JavaObject
Con il nome delle librerie?
@Fulvio75
mattiniero!
Se avesse già bevuto un paio di caffè...! A meno che io non abbia spiegato "ad cazzum", cosa possibile ?

j3iwVNvvUQ.gif


La dichiarazione della variabile "o" segnala errore, in quanto è di tipo JavaObject ma nel progetto non ho selezionato la libreria (JavaObject).
Quando seleziono (= importo) la libreria IlnomeCheVuoi.b4xlib, la segnalazione scompare; eppure non è la JavaObject, no?!

Questo perché la libreria che ho appena creato, IlnomeCheVuoi.b4xlib, è fatta in questo modo:
è un semplice file di testo di nome Manifest.txt che ho compresso (zippato) e gli ho dato quel nome, soprattutto quell'estensione, .b4xlib.
TUTTO il testo che Manifest.txt contiene è:
B4X:
DependsOn=JavaObject
ovvero è la dichiarazione che la libreria (e quindi i progetti che la useranno) dipende dalla libreria JavaObject, necessita di questa libreria, quindi la carica automaticamente, anche se non risulterà selezionata.

Allego sia la IlNomeCheVuoi.b4xlib (ripeto, semplice file zippato) che il progetto che la usa (codice nella gif animata).

--------------------------

Nota che spero non ti complichi la vita.

In quel Manifest ho scritto, come detto:
B4X:
DependsOn=JavaObject
Alcune librerie, pur facendo le stesse cose in tutte le "piattaforme" (B4J, B4A, B4i), hanno nomi simili ma diversi.
Ad esempio OkHttpUtils2, che si chiama esattamente così in B4A, ma in B4J si chiama jOkHttpUtils2.
La tua eventuale IlNomeCheVuoi.b4xlib che dovesse essere multipiattaforma, più precisamente il Manifest.txt file, dovrebbe contenere:
B4X:
B4A.DependsOn=OkHttpUtils2
B4J.DependsOn=jOkHttpUtils2
ovvero specificare il nome giusto da usare a seconda del linguaggio; non basterebbe:
B4X:
DependsOn=OkHttpUtils2
in quanto funzionerebbe solo in B4A, perché solo in questo linguaggio il nome è quello, OkHttpUtils2.
 

Attachments

  • IlNomeCheVuoi.b4xlib
    178 bytes · Views: 95
  • JustATest.zip
    1.5 KB · Views: 116
Last edited:
Top