Frage

Ich installierte Titanium von Appcelerator und die "KitchenSink" Beispielanwendung gebaut.

Alle funktionieren gut, ich frage mich nur, wo hat der Javascript-Code endet in einem integrierten App auf.

ich grep-ed das Projekt Xcode und auch das Ergebnis Anwendung, wie ich es in Library/Application Support/iPhone Simulator/....KitchenSink.app gefunden, aber ich kann keine Funktionsnamen von .js Dateien, nicht einmal String Texte innerhalb der Anwendung verwendet finden.

Nächste Information Ich fand eine Antwort hier: Wie funktioniert Appcelerator Titanium Mobile-Arbeit aber ich weiß nicht genau verstehen, wie der Prozess funktioniert.

Ist der JavaScript-Code in einen binären Code kompiliert werden (was Compiler verwendet wird, dann?), Oder ist es nur in einigen speziellen Daten-Format umgewandelt und in einer laufenden Anwendung interpretiert?

Update:

Dies ist, was ich in einem Build / android Verzeichnis von KitchenSink sehen:

michal:bin mac$ find . -name table_view_layout\*
./assets/Resources/examples/table_view_layout.js
./assets/Resources/examples/table_view_layout_2.js
./assets/Resources/examples/table_view_layout_3.js
./assets/Resources/examples/table_view_layout_4.js
./assets/Resources/examples/table_view_layout_5.js
./classes/org/appcelerator/generated/examples/table_view_layout.class
./classes/org/appcelerator/generated/examples/table_view_layout_2.class
./classes/org/appcelerator/generated/examples/table_view_layout_3.class
./classes/org/appcelerator/generated/examples/table_view_layout_4.class
./classes/org/appcelerator/generated/examples/table_view_layout_5.class
michal:bin mac$ unzip -t app.apk | grep table_view_layout
    testing: assets/Resources/examples/table_view_layout.js   OK
    testing: assets/Resources/examples/table_view_layout_2.js   OK
    testing: assets/Resources/examples/table_view_layout_3.js   OK
    testing: assets/Resources/examples/table_view_layout_4.js   OK
    testing: assets/Resources/examples/table_view_layout_5.js   OK

Ich sah in app.apk nicht vor, alles, was ich diese Klassendateien sehen konnte, waren zu jedem der Javascript-Dateien entsprechen. Deshalb ging ich davon aus, dass auf Android JavaScript ist für JVM kompiliert wird. Warum kann nicht gefunden werden, um diese in app.apk?

War es hilfreich?

Lösung

Titan ist nicht ein Wrapper um eine Web-Ansicht wie angegeben vor (obwohl das genau erklärt, wie Phonegap funktioniert). Jeffs Antwort in der Frage verknüpft, ist eine technisch korrekte Erklärung, wie Titan funktioniert, aber hier ist die beste Version, die ich bisher gehört habe, von Marshall Culpepper:

Es ist wahr, dass Titanium Mobil die WebView verwendet (sowohl Android und iOS) in den vorge 1,0 Tage. Dies ist jedoch nicht mehr der Fall und war nicht da unsere Version 1.0 ist März 2010.

Seit 1.0 haben wir zwei separate Javascript Runtimes mit unseren Apps ausgeliefert, und wir laufen den Javascript-Code direkt ohne ein WebView. Ihre gesamte App von Anfang bis Ende wird nun von JS kontrolliert, und wir bieten eine umfassende Reihe von india APIs, die diese ermöglichen. Alles aus UI-Widgets (ja, einschließlich WebView), Core-APIs wie Networking, Dateisystem, Datenbank, den ganzen Weg zu OS-spezifische Dinge wie JS Aktivitäten in Android. Auf der JS Laufzeit vorne sind wir Verschiffen eine gegabelte Version von WebKit Javascript in iOS und einen Schnappschuss von Rhino 1.7 R3 CVS für Android. Was wir mit Ihrem Javascript Quelle tatsächlich tun, ist auf der Plattform abhängig, aber in der Regel bricht es wie folgt auf:

  • Quelle statisch analysiert Verweise auf Titan-Module finden
  • Lokalisierung Strings (strings.xml), App-Metadaten (tiapp.xml) und Dichte bestimmte Bilder alle plattformspezifischen Analoga generieren.
  • In iOS:
    • Ein XCode Projekt / Konfiguration wird mit
    • JS Quelle ist base64'd und als Variable in einer dynamisch erzeugten C-Datei inlined
    • xcodebuild wird verwendet, um die endgültigen Binärdateien zu erzeugen
    • Profile Provisioning, Signaturschlüssel usw. angewendet werden
    • iTunes und einige andere Kleber verwendet, um die IPA auf Ihrem iOS-Gerät zu senden
  • Im Android:
    • Ein Android / Eclipse-Projekt erzeugt
    • In "Entwicklung" -Modus, JS Quelle als APK Vermögen verpackt ist
    • In "Distribution" (Produktion) Modus, wenn Sie bereit sind, die App versenden, wir die JS zu Java kompilieren Bytecode die Rhino JSC-Compiler. http://developer.appcelerator.com/question/100201/enable-android-byte-code-compile
    • dex, aapt und andere Android-SDK-Tools zu bauen verwendet und erzeugen die endgültigen APK
    • adb und keytool sind zum Schieben der APK, um den Emulator und / oder Gerät

Es gibt viele weitere Details, die ich in speziell auf jedem dieser Punkte tauchen könnte, aber der Punkt, den ich wollte nach Hause fahren, ist, dass wir nicht mehr die WebView als unsere Javascript-Engine verwenden. Sie können aber noch einbetten WebViews, und wir bieten eine einfache Integration, die Sie Titanium APIs von einem eingebetteten WebView aufrufen können.

Andere Tipps

Was jhaynie in Ihrer verknüpften Frage sagen ist, dass Titan interpretiert Ihren JS-Code und wandelt es in etwas, das fast identisch mit Objective-C ist.

In einer Web-Anwendung liest der Browser und interpretiert Ihre Javascript und läuft nativen Code zugeordnet ist (vielleicht C ++) intern. Zum Beispiel könnte der Browser sagen: „Das Skript getElementById() ausgeführt wird, so werde ich meine eigenen C ++ Methoden ausführen, um das zu erreichen.“ Was Titan macht, ist, herauszufinden, was die JS-> C ++ (oder in diesem Fall JS-> Objective-C) im voraus sein würde, und dass kompilieren. Es bleibt immer noch einen Dolmetscher offen, wenn dies für Ihren dynamischen Code, aber es wird konvertieren und kompilieren, was es kann.

Das heißt, Sie werden nichts finden, die ähnlich aussieht, was Sie in Ihrem Skript ursprünglich geschrieben. Alles, was auf einen Dolmetscher gelassen werden muss, wird noch bearbeitet und konvertiert und Ihre Symbole ändern (zum Beispiel ein Aufruf an myTestFunction() könnte A() umgewandelt werden, oder 10001101001101: P).


Die übliche Verwendung von Javascript ist es in Echtzeit von einem laufenden Programm zu haben, interpretiert. Das ist nicht das, was hier vor sich geht, und das ist, warum Sie keine Spur von Ihrem Skript sehen können.

    

  •          ist Javascript vorverarbeitet
            Titan führt die Interpretation des Skripts wie jedes andere Programm tun würde (wie ein Web-Browser). Es findet heraus, welche Abhängigkeiten Ihr Skript hat auf dem Titan-API und Sets, die bis stopfen. Es bildet dann Ihre Symbole direkt in (im Fall des iPhone) Objective-C.
            Ein Programm, in der Regel würde in Ihrem Skript lesen (das ist ein einfach ein String ist), interpretiert sie und läuft C-Code zu erreichen, was Ihr Skript gefragt. Titan tut dies vor Hand, um herauszufinden, was C-Code ausgeführt werden soll, und führt die Konvertierung im Voraus.
        
  •     
  •          Code-kompiliert wird, wenn möglich
            Auf der Grundlage der Interpretation des Codes und ihre Abhängigkeiten von dem Titanium-API, Zahlen Titan, was Code kann direkt erstellt werden, und was darf nicht, damit sie volle Dynamik von Javascript zu ermöglichen, kompiliert werden. Ich weiß nicht, wie es wählt, was funktioniert und nicht kompiliert wird, aber man konnte die Quelle überprüfen, ob Sie, dass viele Details wissen wollen.
            Code, der noch interpretted werden muss (als Skript links) noch in Symbole, dass Ergebnis in effizientere Zuordnung zu nativen Code umgewandelt. So ist es immer noch eine interpretierte Skript, aber das bedeutet nicht, es ist immer noch Javascript. Dies bedeutet, dass diese Teile des Skripts noch schneller laufen als üblich Javascript.
            Für iPhone wird die übersetzbare C mit GCC kompiliert eine native binary zu erstellen.
        
  •     
  •          Sie haben ein lauffähiges App *
            Jetzt haben Sie eine App haben, dass Sie auf Ihrem mobilen Gerät ausgeführt werden können. Ihr übersetzbar Code blitzschnell erstellt und läuft worden, während der Rest umgewandelt wird und nach wie vor in einer effizienteren Art und Weise interpretiert, die Geschwindigkeit, mit der in der Nähe von Blitz läuft. : P     

  • Ich hoffe, den Sinn macht jetzt, denn es ist alles, was ich habe! : D

    Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top