2011-12-24 7 views
5

Da tempo cerco questo problema e non ho ancora ricevuto una risposta chiara. Sto scrivendo un'applicazione per Mac OSX che intendo mettere sull'app store, e mentre potrò scriverne la maggior parte in Objective-C, devo chiamare i metodi da una libreria che è disponibile solo in Java. Ho 2 domande:Utilizzo di una libreria Java in un'app Mac Objective-C e installazione dell'app sul Mac App Store

  1. Da quello che ho letto, sembra che JNI (utilizzando il Invocation API) è l'unico modo accettabile di fare questo (anche se Apple ha sconsigliato l'uso di Java in applicazioni Mac, ed è non è davvero accettabile). C'è un altro modo di fare questo?

  2. Ho letto che Apple non consente le app Java sul Mac App Store, ma consentirà un'applicazione prevalentemente nativa che utilizza JNI per incorporare alcune classi Java? Poiché JNI può essere utilizzato per "confezionare" una Java VM con l'app, sembra che la cessazione di Apple di includere Java con OSX in futuro non dovrebbe costituire un problema.

La tua intuizione sarà molto apprezzata. Grazie.

+0

Il JNI . è l'unico modo per chiamare codice Java da codice nativo io non sono sicuro di parere di Apple sulla questione se – zneak

+1

@zneak -.. non la sua non è possibile solo sborsare e reindirizzare lo stdout ho capito quello che stai cercando. a dire -. ma è fuori tema * e * non completamente corretto – Steve

+0

come follow-up, sembra come tho Potrei essere in grado di compilare i componenti Java di cui ho bisogno fino a codice macchina nativo con qualcosa come GCJ. Qualcuno ne sa qualcosa? – Andrew

risposta

3

@Andrew - in poche parole, se quello che stai facendo è molto semplice (e non tocca librerie che usano java.awt o java.swing) quindi GCJ/potrebbe/lavoro. Non lo consiglierei affatto. Il motivo per cui dico che è perché GCJ non supporta/molti/delle caratteristiche 'nuove' Java e meno che il codice Java è scritto mira una versione usurate del JDK, si sta andando a incorrere in problemi di compilazione. Se si compila con deps esterni di terze parti, ad esempio eclipse.anything, ecc. Si incontreranno enormi mal di testa.

presumo si dispone di codice che avete già scritto in Java e si vuole sfruttare tale codice come un servizio a un molto più bello (e nativo) objc UI. Se è così, onestamente, penso che troverete molto più successo e molto meno mal di testa semplicemente mordendo il proiettile e creando una base di codice objc per il vostro livello di servizio :(

Naturalmente c'è la possibilità di utilizzare il nativo mac ui semplicemente come un thin client per un livello di servizio distribuito basato su cloud (scritto in java OFC). Ma io non sono sicuro di come/quello che apple pensa a thin client a servizi web basati nella loro app store.

+0

Grazie per la risposta, Chris. Questo è più o meno quello che pensavo. Purtroppo, la libreria Java che ho bisogno non è stato scritto da me, e non è possibile per me ri-scrittura in obj-C. Ho intenzione di cercare un'altra libreria che faccia la stessa cosa in C/C++/obj-C. – Andrew