CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 4eyes81 con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: elmegio con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: bluemask con ben 43 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 12
Discussione:

Lanciare jar passandogli parametri da un activity

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Feb 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Lanciare jar passandogli parametri da un activity

    Salve,
    sto lavorando ad un progetto che richiede il porting di un programma da Linux ad Android;
    Finora si è riuscito a far funzionare la necessaria equinox3.6 (modificata) su Android e a far richiamare l'OSGi dalla stessa applicazione, ma solo attraverso la adb shell, tramite l'esecuzione di uno script che lancia un file del jar.
    A questo punto dovrei creare un'activity. apk che includa tutto e lo renda funzionante allo stesso modo.

    Più in dettaglio, fino ad ora ho caricato un po' di archives.jar (contenenti il classes.dex) nell'emulatore: un jar per il programma stesso, un jar per equinox, altri jar di supporto.
    Poi c'è il script.sh che lancia il main.class del mio programma passandogli alcuni parametri necessari al programma e ad equinox per avviarsi, il main.class lancia il framework equinox e quindi il programma può caricare i bundles e fare il suo lavoro.
    Per chiarire ecco una versione ridotta dello script di partenza:

    /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -Xverify:none -Dosgi.debug=file:.options -Dosgi.java.profile=file: Dalvik_Core_Library-0.9.profile -Dnetserv.container.ctrlport=7001 -classpath org.eclipse.osgi_3.6.0.v20100517.jar:netservlaunch .jar NetServ.launch.Main -console -clean

    Non ho esperienza di Android e ho cercato di creare un'attività che si comporti in modo simile al mio script, ma senza alcun successo.
    Ho aggiunto tutti gli archives.jar al mio progetto con "Add External jars" e provato a lanciare il main.class come se fosse un'altra attività, utilizzando Intent e gli ho inviato i parametri utilizzando putExtra(), ma dall'altro lato, nel jar del programma, non si può recuperare e utilizzare i parametri necessari, perché si tratta di un .jar e non è un apk nel vero senso dei termine ... Non so se questo è il motivo per cui non funziona, comunque non va.
    Qualche idea su come fare qualcosa di simile?
    Oppure qualche consiglio su dove cercare una soluzione?
    Vi ringrazio in anticipo per qualsiasi aiuto!

  2.  
  3. #2
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da frid81 Visualizza il messaggio
    Salve,
    sto lavorando ad un progetto che richiede il porting di un programma da Linux ad Android;
    Finora si è riuscito a far funzionare la necessaria equinox3.6 (modificata) su Android e a far richiamare l'OSGi dalla stessa applicazione, ma solo attraverso la adb shell, tramite l'esecuzione di uno script che lancia un file del jar.
    A questo punto dovrei creare un'activity. apk che includa tutto e lo renda funzionante allo stesso modo.

    Più in dettaglio, fino ad ora ho caricato un po' di archives.jar (contenenti il classes.dex) nell'emulatore: un jar per il programma stesso, un jar per equinox, altri jar di supporto.
    Poi c'è il script.sh che lancia il main.class del mio programma passandogli alcuni parametri necessari al programma e ad equinox per avviarsi, il main.class lancia il framework equinox e quindi il programma può caricare i bundles e fare il suo lavoro.
    Per chiarire ecco una versione ridotta dello script di partenza:

    /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -Xverify:none -Dosgi.debug=file:.options -Dosgi.java.profile=file: Dalvik_Core_Library-0.9.profile -Dnetserv.container.ctrlport=7001 -classpath org.eclipse.osgi_3.6.0.v20100517.jar:netservlaunch .jar NetServ.launch.Main -console -clean

    Non ho esperienza di Android e ho cercato di creare un'attività che si comporti in modo simile al mio script, ma senza alcun successo.
    Ho aggiunto tutti gli archives.jar al mio progetto con "Add External jars" e provato a lanciare il main.class come se fosse un'altra attività, utilizzando Intent e gli ho inviato i parametri utilizzando putExtra(), ma dall'altro lato, nel jar del programma, non si può recuperare e utilizzare i parametri necessari, perché si tratta di un .jar e non è un apk nel vero senso dei termine ... Non so se questo è il motivo per cui non funziona, comunque non va.
    Qualche idea su come fare qualcosa di simile?
    Oppure qualche consiglio su dove cercare una soluzione?
    Vi ringrazio in anticipo per qualsiasi aiuto!
    Ciao!

    Hai provato ad includere i jar nel tuo progetto (utilizzi eclipse immagino) non come external jar, ma come risorse libs per la tua applicazione?
    Devi creare una folder nel progetto dell'applicazione chiamata libs e copiare i file jar al suo interno. Dopodichè, nelle properties del progetto, aggiungere i jar da java build path-> add jars...
    In questo modo i file .jar saranno inclusi nell'apk e copiati sul device ad ogni distribuzione.

    Anche io ho poca esperienza di programmazione Android, ho dovuto creare una applicazione utilizzando un jar di terze parti (zxing, barcode scanner), tuttavia insieme al jar ho dovuto istanziare una classe intermedia di 'integrazione' che mi consente di lanciare il jar in una nuova child-activity (con valori di ritorno, startActivityForResult), e catturare i valori di ritorno al resume dell'activity principale nella function 'onActivityResult'.
    La classe intermedia di integrazione era a corredo del file jar che ho utilizzato.
    Prova a dargli un occhio, potrebbe essere un esempio utile per il tuo caso.
    Un' altra cosa: quando dici:

    far richiamare l'OSGi dalla stessa applicazione, ma solo attraverso la adb shell, tramite l'esecuzione di uno script che lancia un file del jar.
    intendi dire che se la tua applicazione eseguisse quello script in running, il tutto funzionerebbe?
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  4. #3
    Baby Droid


    Registrato dal
    Feb 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Il tutto funziona se apro adb shell e eseguo lo script; grazie per la risposta, ora vedo se il tuo caso si può in qualche modo sovrapporre al mio.
    Ecco tutto lo script:
    /system/bin/dalvikvm -Xbootclasspath: /system/framework/core.jar -Xverify:none -Dosgi.debug=file: .options -Dosgi.framework=file: org.eclipse.osgi_3.6.0.v20100517.jar -Dosgi.install.area=file: /bundles/ -Dosgi.java.profile=file: Dalvik_Core_Library-0.9.profile -Dosgi.parentClassloader=ext -Dnetserv.container.ctrlport=7001 -Dnetserv.container.serveripv4=127.0.0.1 -Djava.security.policy=all.policy -Dnetserv.security.bindableports=1024 -Dnetserv.container.user=jae -classpath org.eclipse.osgi_3.6.0.v20100517.jar:netservlaunch .jar NetServ.launch.Main -console -clean

    Per ora ho creato un activity (sì uso Eclipse) che richiama il codice java dell'applicazione che lancia il .jar, ma niente da fare.
    Il problema è che il .jar più importante è una versione modificata di equinox che, almeno dalla shell, parte su android, ma solo con opportuni parametri che quindi ho necessità di inviargli (i -Dosgi...).
    Inoltre ho letto che la shell in quanto a funzionalità non è sovrapponibile alle sdk e che quello che funziona da una parte potrebbe, orrore!, non funzionare dall'altra. Perciò, cosiffatto, l'equinox potrebbe proprio non partire, ma aspettiamo a disperarci...
    Ultima modifica di frid81; 17-03-12 alle 20:54

  5. #4
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da frid81 Visualizza il messaggio
    Il tutto funziona se apro adb shell e eseguo lo script; grazie per la risposta, ora vedo se il tuo caso si può in qualche modo sovrapporre al mio.
    Ecco tutto lo script:
    /system/bin/dalvikvm -Xbootclasspath: /system/framework/core.jar -Xverify:none -Dosgi.debug=file: .options -Dosgi.framework=file: org.eclipse.osgi_3.6.0.v20100517.jar -Dosgi.install.area=file: /bundles/ -Dosgi.java.profile=file: Dalvik_Core_Library-0.9.profile -Dosgi.parentClassloader=ext -Dnetserv.container.ctrlport=7001 -Dnetserv.container.serveripv4=127.0.0.1 -Djava.security.policy=all.policy -Dnetserv.security.bindableports=1024 -Dnetserv.container.user=jae -classpath org.eclipse.osgi_3.6.0.v20100517.jar:netservlaunch .jar NetServ.launch.Main -console -clean

    Per ora ho creato un activity (sì uso Eclipse) che richiama il codice java dell'applicazione che lancia il .jar, ma niente da fare.
    Il problema è che il .jar più importante è una versione modificata di equinox che, almeno dalla shell, parte su android, ma solo con opportuni parametri che quindi ho necessità di inviargli (i -Dosgi...).
    Inoltre ho letto che la shell in quanto a funzionalità non è sovrapponibile alle sdk e che quello che funziona da una parte potrebbe, orrore!, non funzionare dall'altra. Perciò, cosiffatto, l'equinox potrebbe proprio non partire, ma aspettiamo a disperarci...
    Può essere... esattamente tu lanci l'applicazione e poi carichi il jar con quello script o viceversa? In entrambi i casi, hai provato a lanciare lo stesso script in un terminal emulator direttamente sul device anziché via adb? A questo punto se si trova in modo per lanciare lo script tramite un Intent direttamente nel codice quando l'app si avvia, è fatta, anzi potresti anche copiare tutto lo script in un file .sh e avviarlo a runtime dentro il running della tua applicazione:

    codice:
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec("sh /data/TuoScript.sh");
    credo che per funzionare tu debba aver installato busybox e root enabled
    Let's Try

    Inviato dal mio Nexus S usando Tapatalk
    Ultima modifica di frank17next; 18-03-12 alle 09:41
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  6. #5
    Baby Droid


    Registrato dal
    Feb 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ho provato a lanciare il medesimo script invece che da adb shell da terminal emulator come mi hai suggerito e dà dei problemi: in particolare non riesce a rimuovere dei file che all'avvio di equinox vengono eliminati e non riesce a creare il lockmanager. Non so se si tratta di permessi che ho da adb shell (che di defualt è già root) e non da terminal emulator...
    Inoltre avevo anche provato la via del runtime.exec("script") ma non funziona, forse per lo stesso motivo di cui sopra; ma informandomi meglio ho visto che non è una buona idea lanciare exec da dentro un'applicazione android, dato che il funzionamento di questo comando non si baserebbe direttamente sulle sdk e potrebbe variare da terminale a terminale.

    Tornando al punto. L'unico modo che ho per far funzionare il tutto (il cui problema fondamentale è il lancio del framework equinox) è 1-fare l'upload dei jar di cui ho bisogno in una cartella dell'emulatore, i jar più importanti sono: quello dell'applicazione stessa, in cui è contenuto il main.class che dà lo start iniziale, e quello del framework equinox che viene inizializzato ed attivato dal main e che poi resta in attesa di eventuali istruzioni
    2-lanciare lo script che avvia la main.class passandole delle Properties usate anche per far partire l'equinox.

    Tralasciando la soluzione del runtime.exec che non posso perseguire, ho provato a trasportare il codice del main.class in un'activity (ovver ho "esploso" il jar relativo all'applicazione con il main.class e ho messo tutto nello stesso package) e a caricare tutti i jar, compreso quello dell'equinox, prima come external jar e poi mettendoli nella cartella libs (come da te suggerito) sempre includendoli nelle Libraries e attivando l'"Order and Export". Le proprietà l'ho settate con System.setProperty("chiave","valore"). Poi fondamentalmente non ho cambiato nulla del modo in cui il main inizializza il framework equinox e lo fa partire, forse è questo lo sbaglio... La parte relativa al framework, su cui tutto si inceppa è
    Map<String,String> configuration = new HashMap<String,String>();
    configuration.put("org.osgi.framework.system.packa ges.extra", "NetServ.launch.service");
    FrameworkFactory factory = (FrameworkFactory)Class.forName(factoryName).newIn stance();
    Framework framework = factory.newFramework(configuration);
    framework.init();
    framework.start();

    L'esecuzione si ferma a "framework.init();" ora sto cercando di capire come far eseguire questi ultimi due passi, fatti questi dovrebbe funzionare tutto...

  7. #6
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Eheh... ho capito.

    il logcat che scrive al framework.init(); ?
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  8. #7
    Baby Droid


    Registrato dal
    Feb 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Questa è la parte finale del logcat:
    I/ActivityManager( 61): Start proc com.container for activity com.container/.NetServ.launch.ContainerActivity: pid=445 uid=10038 gids={3003}
    I/ActivityManager( 61): Displayed com.container/.NetServ.launch.ContainerActivity: +1s594ms
    D/dalvikvm( 133): GC_EXPLICIT freed 87K, 50% free 3000K/5959K, external 4834K/5568K, paused 289ms
    I/ARMAssembler( 61): generated scanline__00000077:03515104_00001004_00000000 [ 65 ipp] (85 ins) at [0x444ea6e0:0x444ea834] in 1070648 ns
    I/ARMAssembler( 61): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x444ea838:0x444eaa00] in 934739 ns
    I/InputReader( 61): Device reconfigured: id=0x0, name=qwerty2, display size is now 480x800
    I/InputManager-Callbacks( 61): No virtual keys found for device qwerty2.
    I/launch ( 445): container properties: {netserv.container.serveripv4=127.0.0.1, netserv.security.bindableports=1024, netserv.container.user=jae, netserv.container.ctrlport=7001}
    (PS c'è un bottone che avvia l'esecuzione del programma)

    Con grande delusione non fornisce alcuna info su cosa stia facendo e su quali siano gli errori. Ho scoperto che si blocca all'init() semplicemente perché ho fatto in modo di costruire una stringa (che poi stampo a video) man mano che il codice viene eseguito, così ho visto che all'init() si blocca e non va oltre. a Questo punto direi che devo trovare il modo di recuperare i possibili messaggi di errore che spero da qualche parte vengano prodotti anche se non visualizzati dal logcat per capire che cos'è che non va.

  9. #8
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da frid81 Visualizza il messaggio
    Questa è la parte finale del logcat:
    I/ActivityManager( 61): Start proc com.container for activity com.container/.NetServ.launch.ContainerActivity: pid=445 uid=10038 gids={3003}
    I/ActivityManager( 61): Displayed com.container/.NetServ.launch.ContainerActivity: +1s594ms
    D/dalvikvm( 133): GC_EXPLICIT freed 87K, 50% free 3000K/5959K, external 4834K/5568K, paused 289ms
    I/ARMAssembler( 61): generated scanline__00000077:03515104_00001004_00000000 [ 65 ipp] (85 ins) at [0x444ea6e0:0x444ea834] in 1070648 ns
    I/ARMAssembler( 61): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x444ea838:0x444eaa00] in 934739 ns
    I/InputReader( 61): Device reconfigured: id=0x0, name=qwerty2, display size is now 480x800
    I/InputManager-Callbacks( 61): No virtual keys found for device qwerty2.
    I/launch ( 445): container properties: {netserv.container.serveripv4=127.0.0.1, netserv.security.bindableports=1024, netserv.container.user=jae, netserv.container.ctrlport=7001}
    (PS c'è un bottone che avvia l'esecuzione del programma)

    Con grande delusione non fornisce alcuna info su cosa stia facendo e su quali siano gli errori. Ho scoperto che si blocca all'init() semplicemente perché ho fatto in modo di costruire una stringa (che poi stampo a video) man mano che il codice viene eseguito, così ho visto che all'init() si blocca e non va oltre. a Questo punto direi che devo trovare il modo di recuperare i possibili messaggi di errore che spero da qualche parte vengano prodotti anche se non visualizzati dal logcat per capire che cos'è che non va.
    Eheh.. hai applicato code and fix in maniera massiccia Hai fatto bene, almeno sei arrivato al punto del crash.
    Senti ma 'I/InputManager-Callbacks( 61): No virtual keys found for device qwerty2.' dici che è innocuo?
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  10. #9
    Baby Droid


    Registrato dal
    Feb 2012
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da frank17next Visualizza il messaggio
    'I/InputManager-Callbacks( 61): No virtual keys found for device qwerty2.' dici che è innocuo?
    sì questo era innocuo. Alla fine non avevo gestito/catturato bene le eccezioni. Ora gli errori si vedono eccome.
    Per inviargli come parametri i percorsi dei file di configurazione ho messo tali file dentro res/raw, poi dentro l'applicazione ho creato dei nuovi file (che in automatico android mette in /data/data/"package"/files/, l'unico path che alla fine riconosce) e ci ho copiato il contenuto degli originali, quindi al system.setProperty passo il path suddetto.
    Metto un po' di codice nel caso potesse essere di aiuto a qualcuno:
    try{createFile(R.raw.option, "option"); ...}catch(Exception e){...}
    System.setProperty("osgi.debug", "file:/data/data/NetServ.launch/files/option");
    ....
    private void createFile(int idFile, String nameFile) throws Exception{
    StringBuffer inLine = new StringBuffer();
    InputStream in =getResources().openRawResource(idFile);
    BufferedReader inRd = new BufferedReader(new InputStreamReader(in));
    String text;
    while ((text = inRd.readLine()) != null) {
    inLine.append(text);
    inLine.append("\n");
    }
    in.close();
    FileOutputStream create_file = null;
    OutputStreamWriter osw = null;
    create_file = openFileOutput(nameFile, Context.MODE_WORLD_WRITEABLE);
    osw = new OutputStreamWriter(create_file);
    osw.write(inLine.toString());
    osw.close();
    }
    Ora il problema si ha con i percorsi dei jar, dato che pure quelli dovrei passargli, altrimenti non fa partire né l'equinox né gli altri bundles che servono; dal momento che nelle apk viene messo tutto nel classes.dex, jar inclusi, secondo me questa via non è perseguibile importando i jar dentro l'applicazione.
    Allora ho provato a lasciare i .jar fuori dall'apk e in effetti in questo modo equinox parte, ma non riconosce un Activator di un bundle che serve per l'applicazione:

    I/dalvikvm( 5229): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
    E/dalvikvm( 5229): ERROR: defineClass(0x4067f418, NetServ.BuildingBlock.Activator, 0x40686358, 0, 5248, 0x40680970)
    I/System.out( 5229): java.lang.UnsupportedOperationException: can't load this type of class file
    I/System.out( 5229): at java.lang.VMClassLoader.defineClass(Native Method)
    I/System.out( 5229): at java.lang.ClassLoader.defineClass(ClassLoader.java :326)
    .............
    eppure il .dex c'è....

  11. #10
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da frid81 Visualizza il messaggio
    sì questo era innocuo. Alla fine non avevo gestito/catturato bene le eccezioni. Ora gli errori si vedono eccome.
    Per inviargli come parametri i percorsi dei file di configurazione ho messo tali file dentro res/raw, poi dentro l'applicazione ho creato dei nuovi file (che in automatico android mette in /data/data/"package"/files/, l'unico path che alla fine riconosce) e ci ho copiato il contenuto degli originali, quindi al system.setProperty passo il path suddetto.
    Metto un po' di codice nel caso potesse essere di aiuto a qualcuno:
    try{createFile(R.raw.option, "option"); ...}catch(Exception e){...}
    System.setProperty("osgi.debug", "file:/data/data/NetServ.launch/files/option");
    ....
    private void createFile(int idFile, String nameFile) throws Exception{
    StringBuffer inLine = new StringBuffer();
    InputStream in =getResources().openRawResource(idFile);
    BufferedReader inRd = new BufferedReader(new InputStreamReader(in));
    String text;
    while ((text = inRd.readLine()) != null) {
    inLine.append(text);
    inLine.append("\n");
    }
    in.close();
    FileOutputStream create_file = null;
    OutputStreamWriter osw = null;
    create_file = openFileOutput(nameFile, Context.MODE_WORLD_WRITEABLE);
    osw = new OutputStreamWriter(create_file);
    osw.write(inLine.toString());
    osw.close();
    }
    Ora il problema si ha con i percorsi dei jar, dato che pure quelli dovrei passargli, altrimenti non fa partire né l'equinox né gli altri bundles che servono; dal momento che nelle apk viene messo tutto nel classes.dex, jar inclusi, secondo me questa via non è perseguibile importando i jar dentro l'applicazione.
    Allora ho provato a lasciare i .jar fuori dall'apk e in effetti in questo modo equinox parte, ma non riconosce un Activator di un bundle che serve per l'applicazione:

    I/dalvikvm( 5229): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
    E/dalvikvm( 5229): ERROR: defineClass(0x4067f418, NetServ.BuildingBlock.Activator, 0x40686358, 0, 5248, 0x40680970)
    I/System.out( 5229): java.lang.UnsupportedOperationException: can't load this type of class file
    I/System.out( 5229): at java.lang.VMClassLoader.defineClass(Native Method)
    I/System.out( 5229): at java.lang.ClassLoader.defineClass(ClassLoader.java :326)
    .............
    eppure il .dex c'è....
    Allora prova una soluzione 'mista', nel senso:
    1) i .jar che ti servono li includi nell'applicazione come library del java builth path, in modo che ti riconosce l'Activator del bundle che ti serve di cui parli.
    2) gli stessi .jar, inclusi come library, li mantieni anche esternamente, come se fossero delle copie, in modo da poter far partire equinox.
    Per questo puoi copiarli nella dir 'assets' del progetto e copiarli dove vuoi tu ad ogni avvio applicazione, con un semplice i/o stream (o come già hai fatto per la copia da res/raw) che legge 'assets' e copia sul device (solo se mancano, se già ci sono non fai la copia) Es.:
    codice:
     public void copiaJar() throws IOException {
    	  if (controlloEsistenzaFileJar()) {
    	  }else{
    	    InputStream assetsJar = context.getAssets().open("ilmiofilejar.jar");
    	    OutputStream = new FileOutputStream("/data/data/mia.applicazione.test/ilmiofilejar.jar");
    	    byte[] buffer = new byte[1024];
    	    int length;
    	    while ((length = assetsJar.read(buffer))>0){
    	      outputJar.write(buffer, 0, length);
    	    }	 
    	    outputJar.flush();
    	    outputJar.close();
    	    assetsJar.close();
    	  }
    	}
    codice:
      public boolean controlloEsistenzaFileJar()  {
      File filejar = new File("\data\data\mia.applicazione.test" + "nomefilejar");
      return filejar.exists();
    In questo modo dovresti soddisfare l'Activator perchè i jar sono inclusi nel classes.dex, e passare i percorsi dei jar esternamente, perchè li hai anche all'esterno.
    Ultima modifica di frank17next; 29-03-12 alle 10:58
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

Pagina 1 di 2 12 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy