2010-12-09 10 views
9

Ich bin neu in Android-Programmierung und auf der Suche nach etwas allgemeinem Wissen. Ich überlege mir, die Logik meiner Anwendung in JavaScript zu schreiben, damit derselbe Code in einer Webanwendung und in einer Desktopanwendung ausgeführt werden kann. Wäre es möglich, dass es auch unter Android funktioniert? Ich weiß das:Javascript App in Android

  • SL4A ist als Alpha-Qualität markiert, und Benutzer müssen es installieren, damit eine solche App funktioniert. Trotzdem bietet es Zugriff auf Android API. SL4A-Skripte können, soweit ich weiß, auch nicht in den Android Market gehen.
  • Eine einfache Webapp hat keinen Zugriff auf die meisten Android-API.
  • Wäre es möglich, eine einfache Java-App zu schreiben, die ein HTML-Widget mit JavaScript-Code einbetten und einen Wrapper für den Zugriff auf die erforderliche API bereitstellen würde?

    Ich bin nicht auf der Suche nach einer vollständig tragbaren Sache - ich beabsichtige, UI manuell an jede Umgebung anzupassen. Ich möchte nur die interne Logik für alle Ports gemeinsam haben.

    Antwort

    8

    Wenn Sie Javascript verwenden und auf die native API zugreifen möchten, sollten Sie Appcelerator.com ausprobieren. Diese Leute liefern das.

    +0

    Sehr interessant. Ich suchte nach etwas, das näher an Android selbst ist, aber das könnte auch die Rechnung passen. – liori

    2

    Es gibt Rhino, eine in Java geschriebene Javascript-Engine. Es funktioniert in Android, und es wird von Appcelerator Titanium in einer anderen Antwort hier erwähnt verwendet.

    Benutzeroberfläche und Android-spezifische API können dann in Java geschrieben und verpackt werden, dann durch den in Javascript geschriebenen und von Rhino ausgeführten Logikcode aufgerufen werden.

    +0

    Und ich liebe das auch :) +1 – Tarik

    11

    PhoneGap können Sie eine HTML-basierte App schreiben, die nicht nur mit Android funktioniert, sondern auch iPhone, Windows Phone 7, WebOS und mehr. The API ist standardisiert, so dass Sie die gleiche Seite auf allen Plattformen verwenden können.

    Auf den meisten Plattformen werden die gebräuchlichsten nativen Funktionen unterstützt. (Here's a chart of the features supported auf jeder Plattform) Darüber hinaus, wenn Sie feststellen, dass es eine Funktion gibt, die Sie nicht nur mit ihrer API replizieren können, können Sie write a plugin in der systemeigenen Plattform Sprache (also für Android, die Java sein würde), und dann dieses Plugin aufrufen Ihre HTML/Javascript-Seite.

    +0

    Großartig! Ist es möglich, auch die native Benutzeroberfläche zu verwenden? Intendiert auf Android? – liori

    +0

    @liori: Sie können die HTML-Aktivitäten mit Standard-Android-Aktivitäten mischen, wie Sie möchten, so können Sie HTML mit nativer Benutzeroberfläche mischen, ja. Das Abhören von Absichten kann auf die Standard-Android-Art erfolgen. Sendeabsichten können über ein Plugin vorgenommen werden ([Beispiel] (http://stackoverflow.com/a/5279258/79061)). –

    +0

    +1, das ist fantastisch. – Oli

    0

    Betrachten GWT, ein Java zu Java-Compiler. Du kannst deine Logik und viel anderen Code in einfachem, altem Java schreiben (Es gibt ein paar Dinge (zB Reflektion), die du nicht wie Reflektion machen kannst, aber du könntest es auch nicht in javaScipt machen) Anwendungen wie Google Posteingang verwenden GWT, um eine Menge ihres Codes in javaScript wiederzuverwenden. Sie verwenden nicht nur Logik. Sie können die Abhängigkeitsinjektion, Ihre Architektur, AJAX-Aufrufe und mehr wiederverwenden. Außerdem ist GWT sowohl im Browser als auch in der JVM schneller als javaScript. Das größte Problem, das Sie möglicherweise mit GWT haben, ist, dass es komplizierteres javaScript ist. Reguläres Java ist bereits komplizierter. Wenn es sowohl mit der JVM als auch mit dem Browser funktioniert, kann das alles nur komplizierter werden. Außerdem wurde GWT von Grund auf für extrem komplizierte Web-Apps entwickelt.

    +1

    Die Frage war, Optionen mit JavaScript-basierten Lösungen zu bewerten, nicht mit Java-basierten. Daher ist GWT hier keine gültige Antwort. – liori