2010-05-07 2 views
7

Il est clair que les compilateurs croisés ne seront pas autorisés par Apple App Store, donc un développeur devra se familiariser avec Objective-C pour créer des applications pour l'iPhone.compilateur croisé Objective-C vers Java

Je me demandais, est-ce qu'il y a un compilateur croisé qui va prendre le code de l'application Objective-C et le reconstruire dans une application Java similaire qui peut être empaquetée pour Android? De cette façon, un développeur peut toujours apprendre une seule langue (obj-c) mais mettre des applications sur de nombreux appareils. Je comprends que le port Java serait moins optimal qu'une application codée en mode natif, mais pourrait éventuellement sauver un développeur.

Éditer: Oui, les applications seraient terribles. Mais ne seraient-ils pas aussi terribles que s'ils avaient été construits par monotouch ou le compilateur flash? Ces mêmes méthodes ne peuvent-elles pas être utilisées par ces compilateurs croisés?

+0

SDK Stella convertit supposément votre application iOS à Android et d'autres formats: http: //www.yeecco. com/stella – jsherk

Répondre

7

Je n'ai pas entendu parler d'un compilateur croisé qui fera ce que vous demandez. Même s'il en existait un, le plus gros problème serait que les frameworks (UIKit, CoreAnimation, etc.) soient très différents entre les deux plateformes. Sans une sorte de cadre commun, tout le code interfaçant avec les frameworks devra être retravaillé.

+0

Voici le cadre commun: http://github.com/rcmcastro/cocoatouch-for-android – rcmcastro

-1

Le problème avec un tel compilateur est qu'il produirait des applications terribles. Android a un (meilleur) modèle différent de la façon dont l'application est structurée - alors qu'une application iPhone est plus traditionnelle, une application Android est beaucoup mieux intégrée dans le système (via les activités, la vue, les services et les intentions).

Le plus grand défi n'est pas le code principal, mais l'interface utilisateur et les bibliothèques système. Si toutes les vues étaient XIB, il y a un petit espoir.

3

Pas une chance. En général, la traduction d'un langage de bas niveau tel que C vers un langage de plus haut niveau (un tout petit peu) comme Java va conduire à un code très sous-optimal.

Mais ce n'est même pas la pire partie - vous aurez également besoin de traduire entre deux modèles d'application extrêmement différents. Vous devrez soit ré-implémenter la plupart de Cocoa Touch en tant que shim sur Android, soit essayer de comprendre ce que l'application iPhone est en train de faire et lancer des idiomes Android équivalents. Un chemin beaucoup plus probable serait quelque chose comme GNUstep, mais je ne sais pas si quelqu'un cherche sérieusement à implémenter la couche UIKit pour GNUstep, et vous finiriez avec une application native à la fin, plutôt que une application Java.

+1

Objective-C est un langage de plus haut niveau, tout comme Java est ... J'ai plus d'une décennie de programmation Java sous ma ceinture et maintenant le travail à temps plein Objective-C depuis la sortie de l'iPhone SDK (et même un peu avant cela). –

+0

Pour clarifier - vous pouvez utiliser des choses comme des pointeurs de fonction, l'allocation manuelle de la mémoire, les masques de bits et les champs de bits, et d'autres fonctions C dans votre code Objective-C. Un programme Java devrait émuler ces constructions avec quelque chose de beaucoup plus lourd. –

+0

Nous avons totalement fait cela à proposable. –

1

Il existe un projet, appelé XML Virtual Machine, qui est similaire à ce que vous demandez. Cela m'intéressait avant que je connaisse l'objectif-C. Pour autant que je sache, la compilation croisée de Java vers iPhone était possible (avec quelques limitations). Le projet est toujours en développement. Vous pouvez consulter sa page Web au XML VM webpage.

Peut-être que ppl de XML VM pourrait répondre à votre question (s'ils prévoient de créer une compilation croisée d'Objective-C vers Java). Mais je prétends toujours que faire deux fois l'application (pour chaque plate-forme utilisant des langages et des outils différents) donnerait certainement de meilleurs résultats.

4

Ce problème est résolu avec Apportable. Il utilise clang et runtime Objective-c d'Apple et compile pour Android nativement. Il relie également à ce code avec JNI d'une manière agréable, de sorte qu'il est accessible sous Android.Vous n'avez pas besoin de convertir en Java et il n'y a aucune pénalité en termes de performance car il est compilé pour l'architecture ARM native exécutée sur le périphérique (il peut même parfois être plus rapide que Dalvik/Java sur le périphérique). Il dispose également d'un port d'UIKit qui cartographie tout assez bien.

+0

C'est plutôt cool. La documentation sur le site Web est assez clairsemée, cependant. Quels sont les frameworks supportés, en plus d'UIKit? –

+0

1000 $ pour utiliser UIKit? Merci mais, non merci. –

+0

Vous pouvez utiliser UIKit sans payer 1000 $. –

1

Oui, il existe une application qui convertit Objective-C en Java. Vous aurez toujours besoin de connaître un peu de Java mais cela vous fera gagner beaucoup de temps à porter sur Android. Il est livré avec un projet de compatibilité Android que vous pouvez ajouter en tant que dépendance dans Eclipse. Il a des mappages de types et de méthodes personnalisables et vous pouvez spécifier des mappages de méthodes à l'aide d'un système de gabarit.

Check it out ici ... O2J - Objective-C to Java Converter

Voici leur façon à la vidéo ... O2J Howto Video

+0

Merci @Cal .C'est la seule solution qui soit au moins un peu utile, les autres ne fonctionnent plus ou n'existent plus. –