Firefox OS Simulatorのディレクトリ散策 [ソフトウェア]
前回、Firefox OS Simulatorを入れて使ってみました。Firefox OSってのは、携帯のOSで、iPhone、Androidに続く第三の勢力です。マイクロソフト?携帯に進出してたんだったっけw?(元W-ZERO3[es]所持者)
今回は入れたものの中身を見てみます。暇がないのでつっこんではできないけど、全体をなめるぐらいはできるかな?
HTML5で作られているっていうので有名みたいで、それゆえオープンであるとされている。iPhoneは基本的にネイティブ動作させようとするとObjective-Cで、AndroidだとJavaなのかな?(あ、JavaだとJITでも使わんとネイティブじゃないか) どっちもHTML5対応でアプリを作れるんじゃないかと思うけど、Mozillaはそれを強いたって事なんでしょうか。まぁ動作速度が確保されるのと、中身を見られても平気であれば、問題ないわけです。まぁJava的にネイティブバイナリを呼ぶ予備的な仕組みを作らざるを得ないかもしれません。簡単に中身を見られたりしちゃいけなかったり、動作的にアセンブラでギリギリまでCPUを使い切りたかったり、で。でも、基本HTML5 + JavaScript + CSS3という事なんでしょう。
MacとWindowsに入れてみましたが、Macだとコンソールのリンクを押すとハングするバグがあるので、Windowsのディレクトリを駆けずり回って見ます。Firefoxのプラグインなので、場所もそういうところにある。
C:\Users\ユーザー名\AppData\Roaming\Mozilla\Firefox\Profiles\よくわからない文字列\extensions\r2d2b2g@mozilla.org\
なぜR2D2? 何かコードネームがStar Wars関係とか? 次はC3POとかしか無さそうな気もするがいいか(ルーカスはスゴいと思うけど、そんなに好きでもない)。そこで、「.js」でディレクトリを検索すると、345個もJavaScriptのファイルが検索に引っかかりました。.jsのファイルの他に、「.jsm」と「.json」も引っかかってきちゃいましたが、jsmの中身もJavaScriptみたいなので、4つのJSON以外はみんなJavaScriptみたいですね。それらを合わせると4MBだったので、思ったよりも多くない感じ。他の拡張子でもJavaScriptのがありそうですね。
まぁいいや、他に気になるところはあるかな。恥ずかしながらディレクトリを晒す。あ、今までWindowsだったけど、やまれぬ事情があってMacのディレクトリになってます。Firefoxのプラグインが集まってるディレクトリにある、「r2d2b2g@mozilla.org」以下のディレクトリ構成となっております。
って長いな。気になるところをあとでピックアップ。
ん~、なかなか色々ありますね。気になった所はファイル名に色でも付けておこうかな(めんどいのでしないかもしれないけど)。B2G.appとかは、エミュレータそのものなので必要ないかな?
でも、本体の仕組みがわかんないと困るところもあるだろうから、JavaScriptでできている所は見えたほうがいいんでしょうね。本当ならOSのAPIで提供されるところなんだろうけど、それをそのままファイルで見せてしまったほうがいいってことでしょうか。どこまでオープンにされているか確かめたいところですね。ググったらB2Gのコンパイルの仕方とか出てたので、エミュレータもOSSなのかとちょっと驚く。
まぁ、Mozillaとしては普通なオープン企画なんだろうけど、なかなかできることじゃないよね。IEはもちろん穴ぼこがどんなに開いていても自分達で何とかできないプロプライエタリなソフトだし、Chromeにしたってどこぞからかき集めたOSSを組み合わせたソフトだから、本人たちが作った部分はMozillaに比べて非常に少ない、と思う。コンパイルするだけでうんざりするソフトウェアリポジトリだったりするけど、まぁきちんと成果物がWindowsとMacやLinuxに提供されているので問題ではない。まぁ第三者がもっと使いやすい形であったほうがいいとは思うけど、それで開発が妨げられるぐらいだったらそのままでいい。
profile/webapps/
ってところに、アプリが存在するみたい。Twitterのアプリ(だろうと思われるもの)を見てみると、「twittershare.gaiamobile.org」ってフォルダに「application.zip」、「manifest.webapp」ってのが入ってる。zipって拡張子はわかりやすいですね。たぶん、普通のzipアーカイブでしょう。manifest.webappってのはテキストですね。
application.zipの中身。今度はWindowsのtreeでやってます。UNIX系のtreeの方が見やすい気がする。
同じような構成でzipでアーカイブすればアプリが作れる?
この開発環境があるかどうかさえ調べてないですが、自分でディレクトリを作ってやることぐらいはそんなに難しいことも、アーカイブに固めるのもWindowsでもMacでもOSに標準に付いてる機能だと思うので、特に用意する環境ってのも、絵を作るイメージエディタと、文字を書くエディタぐらいで済むんじゃないかと思われ。
細かいところは、後で詳しく調べてみようかね。こんな泥臭い方法じゃなくて、もっとスマートに出来るやり方があるかも知れないし。どちらにしても、HTMLとJavaScriptとビットマップイメージが作れれば出来そうなのは分かった。中身見てないで、拡張子でしか判断してないけど。なんかお手軽すぎやしませんか? まぁ高度なことができなくなるわけではないだろうから、基本が単純な事に越したことはないけど。
今回は場所の関係で、WindowsとMacを行き来しちゃいましたが、基本的には同じ構成だと思います。今度はアプリの中身であるjsファイルを中心に見ていきたいと思います(予定は未定)。
今回は入れたものの中身を見てみます。暇がないのでつっこんではできないけど、全体をなめるぐらいはできるかな?
HTML5で作られているっていうので有名みたいで、それゆえオープンであるとされている。iPhoneは基本的にネイティブ動作させようとするとObjective-Cで、AndroidだとJavaなのかな?(あ、JavaだとJITでも使わんとネイティブじゃないか) どっちもHTML5対応でアプリを作れるんじゃないかと思うけど、Mozillaはそれを強いたって事なんでしょうか。まぁ動作速度が確保されるのと、中身を見られても平気であれば、問題ないわけです。まぁJava的にネイティブバイナリを呼ぶ予備的な仕組みを作らざるを得ないかもしれません。簡単に中身を見られたりしちゃいけなかったり、動作的にアセンブラでギリギリまでCPUを使い切りたかったり、で。でも、基本HTML5 + JavaScript + CSS3という事なんでしょう。
MacとWindowsに入れてみましたが、Macだとコンソールのリンクを押すとハングするバグがあるので、Windowsのディレクトリを駆けずり回って見ます。Firefoxのプラグインなので、場所もそういうところにある。
C:\Users\ユーザー名\AppData\Roaming\Mozilla\Firefox\Profiles\よくわからない文字列\extensions\r2d2b2g@mozilla.org\
なぜR2D2? 何かコードネームがStar Wars関係とか? 次はC3POとかしか無さそうな気もするがいいか(ルーカスはスゴいと思うけど、そんなに好きでもない)。そこで、「.js」でディレクトリを検索すると、345個もJavaScriptのファイルが検索に引っかかりました。.jsのファイルの他に、「.jsm」と「.json」も引っかかってきちゃいましたが、jsmの中身もJavaScriptみたいなので、4つのJSON以外はみんなJavaScriptみたいですね。それらを合わせると4MBだったので、思ったよりも多くない感じ。他の拡張子でもJavaScriptのがありそうですね。
まぁいいや、他に気になるところはあるかな。恥ずかしながらディレクトリを晒す。あ、今までWindowsだったけど、やまれぬ事情があってMacのディレクトリになってます。Firefoxのプラグインが集まってるディレクトリにある、「r2d2b2g@mozilla.org」以下のディレクトリ構成となっております。
って長いな。気になるところをあとでピックアップ。
├── bootstrap.js ├── defaults │ └── preferences │ └── prefs.js ├── harness-options.json ├── icon.png ├── icon64.png ├── install.rdf ├── locale ├── locales.json ├── profile │ ├── Cache │ │ ├── 0 │ │ │ └── FB │ │ │ └── A00B2d01 │ │ ├── 1 │ │ ├── 2 │ │ ├── 3 │ │ │ └── 23 │ │ │ └── 5EDCBd01 │ │ ├── 4 │ │ ├── 5 │ │ ├── 6 │ │ ├── 7 │ │ ├── 8 │ │ ├── 9 │ │ │ └── 78 │ │ │ └── 8C4E3d01 │ │ ├── A │ │ │ └── FA │ │ │ └── 882EFd01 │ │ ├── B │ │ │ └── 70 │ │ │ └── D1CE5d01 │ │ ├── C │ │ ├── D │ │ ├── E │ │ │ └── 91 │ │ │ └── ECAE2d01 │ │ ├── F │ │ │ ├── 13 │ │ │ │ └── CB4EAd01 │ │ │ ├── 3B │ │ │ │ └── 1454Cd01 │ │ │ └── A4 │ │ │ └── 3D41Bd01 │ │ ├── _CACHE_001_ │ │ ├── _CACHE_002_ │ │ ├── _CACHE_003_ │ │ └── _CACHE_MAP_ │ ├── OfflineCache │ │ └── index.sqlite │ ├── _CACHE_CLEAN_ │ ├── cert8.db │ ├── compatibility.ini │ ├── cookies.sqlite │ ├── cookies.sqlite-shm │ ├── cookies.sqlite-wal │ ├── extensions │ │ └── b2g-prosthesis@mozilla.org.xpi │ ├── extensions.ini │ ├── extensions.sqlite │ ├── extensions.sqlite-journal │ ├── indexedDB │ │ ├── 12+f+app+++homescreen.gaiamobile.org │ │ │ ├── 1694510209hnoemeersc │ │ │ │ ├── 1 │ │ │ │ ├── 10 │ │ │ │ ├── 11 │ │ │ │ ├── 12 │ │ │ │ ├── 13 │ │ │ │ ├── 14 │ │ │ │ ├── 15 │ │ │ │ ├── 16 │ │ │ │ ├── 17 │ │ │ │ ├── 18 │ │ │ │ ├── 19 │ │ │ │ ├── 2 │ │ │ │ ├── 20 │ │ │ │ ├── 21 │ │ │ │ ├── 22 │ │ │ │ ├── 23 │ │ │ │ ├── 24 │ │ │ │ ├── 25 │ │ │ │ ├── 26 │ │ │ │ ├── 27 │ │ │ │ ├── 28 │ │ │ │ ├── 29 │ │ │ │ ├── 3 │ │ │ │ ├── 30 │ │ │ │ ├── 31 │ │ │ │ ├── 32 │ │ │ │ ├── 33 │ │ │ │ ├── 34 │ │ │ │ ├── 4 │ │ │ │ ├── 5 │ │ │ │ ├── 6 │ │ │ │ ├── 7 │ │ │ │ ├── 8 │ │ │ │ ├── 9 │ │ │ │ └── journals │ │ │ └── 1694510209hnoemeersc.sqlite │ │ ├── 18+f+app+++system.gaiamobile.org │ │ │ ├── 3350367306aesgyanrcoSt │ │ │ ├── 3350367306aesgyanrcoSt.sqlite │ │ │ ├── 781613237wriengdaonwa_m │ │ │ │ ├── 12 │ │ │ │ ├── 13 │ │ │ │ ├── 2 │ │ │ │ ├── 4 │ │ │ │ ├── 5 │ │ │ │ ├── 6 │ │ │ │ └── journals │ │ │ └── 781613237wriengdaonwa_m.sqlite │ │ ├── 2+f+app+++browser.gaiamobile.org │ │ │ ├── 2959517650brreosw │ │ │ │ ├── 1 │ │ │ │ ├── 2 │ │ │ │ ├── 3 │ │ │ │ ├── 4 │ │ │ │ ├── 5 │ │ │ │ └── journals │ │ │ └── 2959517650brreosw.sqlite │ │ ├── 4+f+app+++camera.gaiamobile.org │ │ │ ├── 3350367306aesgyanrcoSt │ │ │ └── 3350367306aesgyanrcoSt.sqlite │ │ └── chrome │ │ ├── 2588645841ssegtnti │ │ ├── 2588645841ssegtnti.sqlite │ │ ├── 3104902905ascetiitvi │ │ ├── 3104902905ascetiitvi.sqlite │ │ ├── 4045445992aslmar │ │ └── 4045445992aslmar.sqlite │ ├── key3.db │ ├── localstore.rdf │ ├── marionette.log │ ├── minidumps │ ├── permissions.sqlite │ ├── places.sqlite │ ├── places.sqlite-shm │ ├── places.sqlite-wal │ ├── prefs.js │ ├── secmod.db │ ├── settings.json │ ├── startupCache │ │ └── startupCache.8.little │ ├── user.js │ ├── webapps │ │ ├── bluetooth.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── browser.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── calendar.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── camera.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── clock.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── communications.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── costcontrol.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── crystalskull.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── cubevid.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── email.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── fm.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── gallery.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── geoloc.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── homescreen.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── image-uploader.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── keyboard.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── maps │ │ │ ├── application.zip │ │ │ └── update.webapp │ │ ├── marketplace │ │ │ └── manifest.webapp │ │ ├── membuster.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── music.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── pdfjs.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── penguinpop.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── settings.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── share-receiver.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── sms.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── system.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── template.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-agent.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-container.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-receiver-1.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-receiver-2.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-receiver-inline.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── test-sensors.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── testpermission.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── towerjelly.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── twittershare.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── uitest.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── video.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ ├── wallpaper.gaiamobile.org │ │ │ ├── application.zip │ │ │ └── manifest.webapp │ │ └── webapps.json │ └── webappsstore.sqlite └── resources ├── addon-sdk │ ├── data │ └── lib │ ├── sdk │ │ ├── addon │ │ │ └── runner.js │ │ ├── addon-page.js │ │ ├── base64.js │ │ ├── console │ │ │ ├── plain-text.js │ │ │ └── traceback.js │ │ ├── content │ │ │ ├── content-proxy.js │ │ │ ├── content-worker.js │ │ │ ├── content.js │ │ │ ├── loader.js │ │ │ ├── symbiont.js │ │ │ ├── thumbnail.js │ │ │ └── worker.js │ │ ├── context-menu.js │ │ ├── core │ │ │ ├── heritage.js │ │ │ ├── namespace.js │ │ │ └── promise.js │ │ ├── deprecated │ │ │ ├── api-utils.js │ │ │ ├── cortex.js │ │ │ ├── errors.js │ │ │ ├── events │ │ │ │ └── assembler.js │ │ │ ├── events.js │ │ │ ├── light-traits.js │ │ │ ├── list.js │ │ │ ├── memory.js │ │ │ ├── observer-service.js │ │ │ ├── traits │ │ │ │ └── core.js │ │ │ ├── traits.js │ │ │ └── window-utils.js │ │ ├── dom │ │ │ └── events.js │ │ ├── event │ │ │ ├── core.js │ │ │ └── target.js │ │ ├── frame │ │ │ └── hidden-frame.js │ │ ├── io │ │ │ ├── byte-streams.js │ │ │ ├── data.js │ │ │ ├── file.js │ │ │ └── text-streams.js │ │ ├── l10n │ │ │ ├── core.js │ │ │ ├── html.js │ │ │ ├── loader.js │ │ │ ├── locale.js │ │ │ └── prefs.js │ │ ├── lang │ │ │ └── functional.js │ │ ├── loader │ │ │ ├── cuddlefish.js │ │ │ └── sandbox.js │ │ ├── net │ │ │ ├── url.js │ │ │ └── xhr.js │ │ ├── notifications.js │ │ ├── page-mod │ │ │ └── match-pattern.js │ │ ├── page-mod.js │ │ ├── panel.js │ │ ├── platform │ │ │ └── xpcom.js │ │ ├── preferences │ │ │ └── service.js │ │ ├── private-browsing │ │ │ └── utils.js │ │ ├── private-browsing.js │ │ ├── querystring.js │ │ ├── request.js │ │ ├── self.js │ │ ├── simple-storage.js │ │ ├── system │ │ │ ├── environment.js │ │ │ ├── events.js │ │ │ ├── globals.js │ │ │ ├── runtime.js │ │ │ ├── unload.js │ │ │ └── xul-app.js │ │ ├── system.js │ │ ├── tabs │ │ │ ├── common.js │ │ │ ├── events.js │ │ │ ├── helpers.js │ │ │ ├── namespace.js │ │ │ ├── observer.js │ │ │ ├── tab-fennec.js │ │ │ ├── tab-firefox.js │ │ │ ├── tab.js │ │ │ ├── tabs-firefox.js │ │ │ ├── tabs.js │ │ │ ├── utils.js │ │ │ └── worker.js │ │ ├── tabs.js │ │ ├── timers.js │ │ ├── url.js │ │ ├── util │ │ │ ├── array.js │ │ │ ├── collection.js │ │ │ ├── deprecate.js │ │ │ ├── list.js │ │ │ ├── object.js │ │ │ ├── registry.js │ │ │ └── uuid.js │ │ ├── widget.js │ │ ├── window │ │ │ ├── browser.js │ │ │ ├── namespace.js │ │ │ └── utils.js │ │ ├── windows │ │ │ ├── dom.js │ │ │ ├── fennec.js │ │ │ ├── firefox.js │ │ │ ├── loader.js │ │ │ ├── observer.js │ │ │ ├── tabs-fennec.js │ │ │ └── tabs-firefox.js │ │ └── windows.js │ └── toolkit │ └── loader.js ├── gcli │ └── lib │ └── gcli.js ├── menuitems │ └── lib │ └── menuitems.js ├── r2d2b2g │ ├── data │ │ ├── content │ │ │ ├── css │ │ │ │ ├── main.css │ │ │ │ └── normalize.css │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── main.js │ │ │ │ ├── plugins.js │ │ │ │ └── vendor │ │ │ │ ├── jquery-1.8.3.min.js │ │ │ │ └── modernizr-2.6.1.min.js │ │ │ └── watermark.png │ │ ├── content-script.js │ │ ├── mac64 │ │ │ └── B2G.app │ │ │ ├── Contents │ │ │ │ ├── Info.plist │ │ │ │ ├── MacOS │ │ │ │ │ ├── XUL │ │ │ │ │ ├── b2g-bin │ │ │ │ │ ├── chrome │ │ │ │ │ │ ├── chrome.jar │ │ │ │ │ │ ├── en-US.jar │ │ │ │ │ │ ├── es-ES.jar │ │ │ │ │ │ ├── localized.manifest │ │ │ │ │ │ ├── marionette.jar │ │ │ │ │ │ ├── nonlocalized.manifest │ │ │ │ │ │ ├── pippki.jar │ │ │ │ │ │ ├── pt-BR.jar │ │ │ │ │ │ ├── reftest.jar │ │ │ │ │ │ ├── toolkit.jar │ │ │ │ │ │ └── xslt-qa.jar │ │ │ │ │ ├── chrome.manifest │ │ │ │ │ ├── components │ │ │ │ │ │ ├── ActivitiesGlue.js │ │ │ │ │ │ ├── ActivityOptions.js │ │ │ │ │ │ ├── ActivityProxy.js │ │ │ │ │ │ ├── ActivityRequestHandler.js │ │ │ │ │ │ ├── ActivityWrapper.js │ │ │ │ │ │ ├── AlarmsManager.js │ │ │ │ │ │ ├── AlertsService.js │ │ │ │ │ │ ├── AppProtocolHandler.js │ │ │ │ │ │ ├── AppsService.js │ │ │ │ │ │ ├── BrowserElementParent.js │ │ │ │ │ │ ├── ConsoleAPI.js │ │ │ │ │ │ ├── ContactManager.js │ │ │ │ │ │ ├── ContentHandler.js │ │ │ │ │ │ ├── ContentPermissionPrompt.js │ │ │ │ │ │ ├── DirectoryProvider.js │ │ │ │ │ │ ├── FeedProcessor.js │ │ │ │ │ │ ├── MailtoProtocolHandler.js │ │ │ │ │ │ ├── MozKeyboard.js │ │ │ │ │ │ ├── Payment.js │ │ │ │ │ │ ├── PaymentFlowInfo.js │ │ │ │ │ │ ├── PaymentGlue.js │ │ │ │ │ │ ├── PaymentRequestInfo.js │ │ │ │ │ │ ├── PermissionPromptService.js │ │ │ │ │ │ ├── PermissionSettings.js │ │ │ │ │ │ ├── ProcessGlobal.js │ │ │ │ │ │ ├── RecoveryService.js │ │ │ │ │ │ ├── SettingsManager.js │ │ │ │ │ │ ├── SettingsService.js │ │ │ │ │ │ ├── SiteSpecificUserAgent.js │ │ │ │ │ │ ├── SmsProtocolHandler.js │ │ │ │ │ │ ├── SystemMessageInternal.js │ │ │ │ │ │ ├── SystemMessageManager.js │ │ │ │ │ │ ├── TCPSocket.js │ │ │ │ │ │ ├── TCPSocketParentIntermediary.js │ │ │ │ │ │ ├── TelProtocolHandler.js │ │ │ │ │ │ ├── TelemetryPing.js │ │ │ │ │ │ ├── Webapps.js │ │ │ │ │ │ ├── YoutubeProtocolHandler.js │ │ │ │ │ │ ├── addonManager.js │ │ │ │ │ │ ├── amContentHandler.js │ │ │ │ │ │ ├── amWebInstallListener.js │ │ │ │ │ │ ├── b2g.xpt │ │ │ │ │ │ ├── browser.xpt │ │ │ │ │ │ ├── components.manifest │ │ │ │ │ │ ├── contentAreaDropListener.js │ │ │ │ │ │ ├── contentSecurityPolicy.js │ │ │ │ │ │ ├── crypto-SDR.js │ │ │ │ │ │ ├── interfaces.manifest │ │ │ │ │ │ ├── jsconsole-clhandler.js │ │ │ │ │ │ ├── libalerts.dylib │ │ │ │ │ │ ├── marionettecomponent.js │ │ │ │ │ │ ├── messageWakeupService.js │ │ │ │ │ │ ├── nsBadCertHandler.js │ │ │ │ │ │ ├── nsBlocklistService.js │ │ │ │ │ │ ├── nsContentDispatchChooser.js │ │ │ │ │ │ ├── nsContentPrefService.js │ │ │ │ │ │ ├── nsDOMIdentity.js │ │ │ │ │ │ ├── nsDefaultCLH.js │ │ │ │ │ │ ├── nsDownloadManagerUI.js │ │ │ │ │ │ ├── nsFormAutoComplete.js │ │ │ │ │ │ ├── nsFormHistory.js │ │ │ │ │ │ ├── nsHandlerService.js │ │ │ │ │ │ ├── nsHelperAppDlg.js │ │ │ │ │ │ ├── nsIDService.js │ │ │ │ │ │ ├── nsINIProcessor.js │ │ │ │ │ │ ├── nsInputListAutoComplete.js │ │ │ │ │ │ ├── nsLoginInfo.js │ │ │ │ │ │ ├── nsLoginManager.js │ │ │ │ │ │ ├── nsLoginManagerPrompter.js │ │ │ │ │ │ ├── nsPrompter.js │ │ │ │ │ │ ├── nsURLFormatter.js │ │ │ │ │ │ ├── nsUpdateTimerManager.js │ │ │ │ │ │ ├── nsWebHandlerApp.js │ │ │ │ │ │ ├── storage-Legacy.js │ │ │ │ │ │ ├── storage-mozStorage.js │ │ │ │ │ │ └── txEXSLTRegExFunctions.js │ │ │ │ │ ├── crashreporter.app │ │ │ │ │ │ └── Contents │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── MacOS │ │ │ │ │ │ │ ├── crashreporter │ │ │ │ │ │ │ └── crashreporter.ini │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ └── Resources │ │ │ │ │ │ ├── English.lproj │ │ │ │ │ │ │ ├── InfoPlist.strings │ │ │ │ │ │ │ ├── MainMenu.nib │ │ │ │ │ │ │ │ ├── classes.nib │ │ │ │ │ │ │ │ ├── info.nib │ │ │ │ │ │ │ │ └── keyedobjects.nib │ │ │ │ │ │ │ └── MainMenuRTL.nib │ │ │ │ │ │ │ ├── classes.nib │ │ │ │ │ │ │ ├── info.nib │ │ │ │ │ │ │ └── keyedobjects.nib │ │ │ │ │ │ └── crashreporter.icns │ │ │ │ │ ├── defaults │ │ │ │ │ │ ├── autoconfig │ │ │ │ │ │ │ ├── platform.js │ │ │ │ │ │ │ └── prefcalls.js │ │ │ │ │ │ └── pref │ │ │ │ │ │ ├── b2g-l10n.js │ │ │ │ │ │ └── b2g.js │ │ │ │ │ ├── dependentlibs.list │ │ │ │ │ ├── dictionaries │ │ │ │ │ │ ├── en-US.aff │ │ │ │ │ │ └── en-US.dic │ │ │ │ │ ├── greprefs.js │ │ │ │ │ ├── hyphenation │ │ │ │ │ │ ├── hyph_af.dic │ │ │ │ │ │ ├── hyph_bg.dic │ │ │ │ │ │ ├── hyph_ca.dic │ │ │ │ │ │ ├── hyph_cy.dic │ │ │ │ │ │ ├── hyph_da.dic │ │ │ │ │ │ ├── hyph_de-1901.dic │ │ │ │ │ │ ├── hyph_de-1996.dic │ │ │ │ │ │ ├── hyph_de-CH.dic │ │ │ │ │ │ ├── hyph_en_US.dic │ │ │ │ │ │ ├── hyph_eo.dic │ │ │ │ │ │ ├── hyph_es.dic │ │ │ │ │ │ ├── hyph_et.dic │ │ │ │ │ │ ├── hyph_fi.dic │ │ │ │ │ │ ├── hyph_fr.dic │ │ │ │ │ │ ├── hyph_gl.dic │ │ │ │ │ │ ├── hyph_hr.dic │ │ │ │ │ │ ├── hyph_hsb.dic │ │ │ │ │ │ ├── hyph_hu.dic │ │ │ │ │ │ ├── hyph_ia.dic │ │ │ │ │ │ ├── hyph_is.dic │ │ │ │ │ │ ├── hyph_it.dic │ │ │ │ │ │ ├── hyph_kmr.dic │ │ │ │ │ │ ├── hyph_la.dic │ │ │ │ │ │ ├── hyph_lt.dic │ │ │ │ │ │ ├── hyph_mn.dic │ │ │ │ │ │ ├── hyph_nb.dic │ │ │ │ │ │ ├── hyph_nl.dic │ │ │ │ │ │ ├── hyph_nn.dic │ │ │ │ │ │ ├── hyph_pt.dic │ │ │ │ │ │ ├── hyph_ru.dic │ │ │ │ │ │ ├── hyph_sh.dic │ │ │ │ │ │ ├── hyph_sl.dic │ │ │ │ │ │ ├── hyph_sv.dic │ │ │ │ │ │ ├── hyph_tr.dic │ │ │ │ │ │ └── hyph_uk.dic │ │ │ │ │ ├── libfreebl3.dylib │ │ │ │ │ ├── libmozalloc.dylib │ │ │ │ │ ├── libmozglue.dylib │ │ │ │ │ ├── libmozsqlite3.dylib │ │ │ │ │ ├── libnspr4.dylib │ │ │ │ │ ├── libnss3.dylib │ │ │ │ │ ├── libnssckbi.dylib │ │ │ │ │ ├── libnssdbm3.dylib │ │ │ │ │ ├── libnssutil3.dylib │ │ │ │ │ ├── libplc4.dylib │ │ │ │ │ ├── libplds4.dylib │ │ │ │ │ ├── libplugin_child_interpose.dylib │ │ │ │ │ ├── libsmime3.dylib │ │ │ │ │ ├── libsoftokn3.dylib │ │ │ │ │ ├── libssl3.dylib │ │ │ │ │ ├── libxpcom.dylib │ │ │ │ │ ├── modules │ │ │ │ │ │ ├── ActivitiesService.jsm │ │ │ │ │ │ ├── ActivitiesServiceFilter.jsm │ │ │ │ │ │ ├── AddonLogging.jsm │ │ │ │ │ │ ├── AddonManager.jsm │ │ │ │ │ │ ├── AddonRepository.jsm │ │ │ │ │ │ ├── AddonUpdateChecker.jsm │ │ │ │ │ │ ├── AlarmDB.jsm │ │ │ │ │ │ ├── AlarmService.jsm │ │ │ │ │ │ ├── AppDownloadManager.jsm │ │ │ │ │ │ ├── AppsServiceChild.jsm │ │ │ │ │ │ ├── AppsUtils.jsm │ │ │ │ │ │ ├── BrowserElementPromptService.jsm │ │ │ │ │ │ ├── CSPUtils.jsm │ │ │ │ │ │ ├── CertUtils.jsm │ │ │ │ │ │ ├── ChromeManifestParser.jsm │ │ │ │ │ │ ├── CommonDialog.jsm │ │ │ │ │ │ ├── ConsoleAPIStorage.jsm │ │ │ │ │ │ ├── ContactDB.jsm │ │ │ │ │ │ ├── ContactService.jsm │ │ │ │ │ │ ├── CrashSubmit.jsm │ │ │ │ │ │ ├── DOMIdentity.jsm │ │ │ │ │ │ ├── DOMRequestHelper.jsm │ │ │ │ │ │ ├── DeferredTask.jsm │ │ │ │ │ │ ├── Dict.jsm │ │ │ │ │ │ ├── DownloadLastDir.jsm │ │ │ │ │ │ ├── DownloadPaths.jsm │ │ │ │ │ │ ├── DownloadUtils.jsm │ │ │ │ │ │ ├── FileUtils.jsm │ │ │ │ │ │ ├── ForgetAboutSite.jsm │ │ │ │ │ │ ├── FrameWorker.jsm │ │ │ │ │ │ ├── FreeSpaceWatcher.jsm │ │ │ │ │ │ ├── Geometry.jsm │ │ │ │ │ │ ├── ISO8601DateUtils.jsm │ │ │ │ │ │ ├── IndexedDBHelper.jsm │ │ │ │ │ │ ├── InlineSpellChecker.jsm │ │ │ │ │ │ ├── KeyValueParser.jsm │ │ │ │ │ │ ├── Keyboard.jsm │ │ │ │ │ │ ├── LightweightThemeConsumer.jsm │ │ │ │ │ │ ├── LightweightThemeImageOptimizer.jsm │ │ │ │ │ │ ├── LightweightThemeManager.jsm │ │ │ │ │ │ ├── MessagePortBase.jsm │ │ │ │ │ │ ├── MessagePortWorker.js │ │ │ │ │ │ ├── Microformats.js │ │ │ │ │ │ ├── MozSocialAPI.jsm │ │ │ │ │ │ ├── NetUtil.jsm │ │ │ │ │ │ ├── ObjectWrapper.jsm │ │ │ │ │ │ ├── OfflineCacheInstaller.jsm │ │ │ │ │ │ ├── PageMenu.jsm │ │ │ │ │ │ ├── Payment.jsm │ │ │ │ │ │ ├── PerfMeasurement.jsm │ │ │ │ │ │ ├── PermissionPromptHelper.jsm │ │ │ │ │ │ ├── PermissionSettings.jsm │ │ │ │ │ │ ├── PermissionsInstaller.jsm │ │ │ │ │ │ ├── PermissionsTable.jsm │ │ │ │ │ │ ├── PhoneNumber.jsm │ │ │ │ │ │ ├── PhoneNumberMetaData.jsm │ │ │ │ │ │ ├── PhoneNumberUtils.jsm │ │ │ │ │ │ ├── PluginProvider.jsm │ │ │ │ │ │ ├── PluralForm.jsm │ │ │ │ │ │ ├── PopupNotifications.jsm │ │ │ │ │ │ ├── PrivateBrowsingUtils.jsm │ │ │ │ │ │ ├── Profiler.jsm │ │ │ │ │ │ ├── PropertyListUtils.jsm │ │ │ │ │ │ ├── Services.jsm │ │ │ │ │ │ ├── SettingsChangeNotifier.jsm │ │ │ │ │ │ ├── SettingsDB.jsm │ │ │ │ │ │ ├── SettingsQueue.jsm │ │ │ │ │ │ ├── SignInToWebsite.jsm │ │ │ │ │ │ ├── SocialService.jsm │ │ │ │ │ │ ├── SpellCheckDictionaryBootstrap.js │ │ │ │ │ │ ├── SystemMessagePermissionsChecker.jsm │ │ │ │ │ │ ├── Task.jsm │ │ │ │ │ │ ├── TelURIParser.jsm │ │ │ │ │ │ ├── TelemetryStopwatch.jsm │ │ │ │ │ │ ├── Troubleshoot.jsm │ │ │ │ │ │ ├── UpdateChannel.jsm │ │ │ │ │ │ ├── UserAgentOverrides.jsm │ │ │ │ │ │ ├── WebappOSUtils.jsm │ │ │ │ │ │ ├── Webapps.jsm │ │ │ │ │ │ ├── WebappsInstaller.jsm │ │ │ │ │ │ ├── WindowDraggingUtils.jsm │ │ │ │ │ │ ├── WorkerAPI.jsm │ │ │ │ │ │ ├── XPCOMUtils.jsm │ │ │ │ │ │ ├── XPIProvider.jsm │ │ │ │ │ │ ├── XPIProviderUtils.js │ │ │ │ │ │ ├── accessibility │ │ │ │ │ │ │ ├── AccessFu.jsm │ │ │ │ │ │ │ ├── EventManager.jsm │ │ │ │ │ │ │ ├── Presenters.jsm │ │ │ │ │ │ │ ├── TouchAdapter.jsm │ │ │ │ │ │ │ ├── TraversalRules.jsm │ │ │ │ │ │ │ ├── Utils.jsm │ │ │ │ │ │ │ └── UtteranceGenerator.jsm │ │ │ │ │ │ ├── commonjs │ │ │ │ │ │ │ ├── loader.js │ │ │ │ │ │ │ └── promise │ │ │ │ │ │ │ └── core.js │ │ │ │ │ │ ├── ctypes.jsm │ │ │ │ │ │ ├── debug.js │ │ │ │ │ │ ├── devtools │ │ │ │ │ │ │ ├── Console.jsm │ │ │ │ │ │ │ ├── NetworkHelper.jsm │ │ │ │ │ │ │ ├── Require.jsm │ │ │ │ │ │ │ ├── SourceMap.jsm │ │ │ │ │ │ │ ├── WebConsoleClient.jsm │ │ │ │ │ │ │ ├── WebConsoleUtils.jsm │ │ │ │ │ │ │ ├── _Promise.jsm │ │ │ │ │ │ │ ├── dbg-client.jsm │ │ │ │ │ │ │ └── dbg-server.jsm │ │ │ │ │ │ ├── identity │ │ │ │ │ │ │ ├── Identity.jsm │ │ │ │ │ │ │ ├── IdentityProvider.jsm │ │ │ │ │ │ │ ├── IdentityStore.jsm │ │ │ │ │ │ │ ├── IdentityUtils.jsm │ │ │ │ │ │ │ ├── LogUtils.jsm │ │ │ │ │ │ │ ├── MinimalIdentity.jsm │ │ │ │ │ │ │ ├── RelyingParty.jsm │ │ │ │ │ │ │ ├── Sandbox.jsm │ │ │ │ │ │ │ └── jwcrypto.jsm │ │ │ │ │ │ ├── jsdebugger.jsm │ │ │ │ │ │ ├── mcc_iso3166_table.jsm │ │ │ │ │ │ ├── nsFormAutoCompleteResult.jsm │ │ │ │ │ │ ├── osfile │ │ │ │ │ │ │ ├── osfile_async_front.jsm │ │ │ │ │ │ │ ├── osfile_async_worker.js │ │ │ │ │ │ │ ├── osfile_shared_allthreads.jsm │ │ │ │ │ │ │ ├── osfile_shared_front.jsm │ │ │ │ │ │ │ ├── osfile_unix_allthreads.jsm │ │ │ │ │ │ │ ├── osfile_unix_back.jsm │ │ │ │ │ │ │ ├── osfile_unix_front.jsm │ │ │ │ │ │ │ ├── osfile_win_allthreads.jsm │ │ │ │ │ │ │ ├── osfile_win_back.jsm │ │ │ │ │ │ │ ├── osfile_win_front.jsm │ │ │ │ │ │ │ ├── ospath_unix_back.jsm │ │ │ │ │ │ │ └── ospath_win_back.jsm │ │ │ │ │ │ ├── osfile.jsm │ │ │ │ │ │ ├── reflect.jsm │ │ │ │ │ │ ├── services │ │ │ │ │ │ │ └── metrics │ │ │ │ │ │ │ ├── collector.jsm │ │ │ │ │ │ │ └── dataprovider.jsm │ │ │ │ │ │ └── services-common │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ ├── bagheeraclient.js │ │ │ │ │ │ ├── log4moz.js │ │ │ │ │ │ ├── observers.js │ │ │ │ │ │ ├── preferences.js │ │ │ │ │ │ ├── rest.js │ │ │ │ │ │ ├── storageservice.js │ │ │ │ │ │ ├── stringbundle.js │ │ │ │ │ │ ├── tokenserverclient.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── platform.ini │ │ │ │ │ ├── plugin-container.app │ │ │ │ │ │ └── Contents │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ ├── MacOS │ │ │ │ │ │ │ └── plugin-container │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ └── Resources │ │ │ │ │ │ └── English.lproj │ │ │ │ │ │ └── InfoPlist.strings │ │ │ │ │ ├── removed-files │ │ │ │ │ └── res │ │ │ │ │ ├── EditorOverride.css │ │ │ │ │ ├── MainMenu.nib │ │ │ │ │ │ ├── classes.nib │ │ │ │ │ │ ├── info.nib │ │ │ │ │ │ └── keyedobjects.nib │ │ │ │ │ ├── contenteditable.css │ │ │ │ │ ├── cursors │ │ │ │ │ │ ├── arrowN.png │ │ │ │ │ │ ├── arrowN@2x.png │ │ │ │ │ │ ├── arrowS.png │ │ │ │ │ │ ├── arrowS@2x.png │ │ │ │ │ │ ├── cell.png │ │ │ │ │ │ ├── cell@2x.png │ │ │ │ │ │ ├── colResize.png │ │ │ │ │ │ ├── colResize@2x.png │ │ │ │ │ │ ├── help.png │ │ │ │ │ │ ├── help@2x.png │ │ │ │ │ │ ├── move.png │ │ │ │ │ │ ├── move@2x.png │ │ │ │ │ │ ├── rowResize.png │ │ │ │ │ │ ├── rowResize@2x.png │ │ │ │ │ │ ├── sizeNE.png │ │ │ │ │ │ ├── sizeNE@2x.png │ │ │ │ │ │ ├── sizeNESW.png │ │ │ │ │ │ ├── sizeNESW@2x.png │ │ │ │ │ │ ├── sizeNS.png │ │ │ │ │ │ ├── sizeNS@2x.png │ │ │ │ │ │ ├── sizeNW.png │ │ │ │ │ │ ├── sizeNW@2x.png │ │ │ │ │ │ ├── sizeNWSE.png │ │ │ │ │ │ ├── sizeNWSE@2x.png │ │ │ │ │ │ ├── sizeSE.png │ │ │ │ │ │ ├── sizeSE@2x.png │ │ │ │ │ │ ├── sizeSW.png │ │ │ │ │ │ ├── sizeSW@2x.png │ │ │ │ │ │ ├── spin1.png │ │ │ │ │ │ ├── spin2.png │ │ │ │ │ │ ├── spin3.png │ │ │ │ │ │ ├── spin4.png │ │ │ │ │ │ ├── vtIBeam.png │ │ │ │ │ │ ├── vtIBeam@2x.png │ │ │ │ │ │ ├── zoomIn.png │ │ │ │ │ │ ├── zoomIn@2x.png │ │ │ │ │ │ ├── zoomOut.png │ │ │ │ │ │ └── zoomOut@2x.png │ │ │ │ │ ├── designmode.css │ │ │ │ │ ├── dtd │ │ │ │ │ │ └── htmlmathml-f.ent │ │ │ │ │ ├── entityTables │ │ │ │ │ │ ├── html40Latin1.properties │ │ │ │ │ │ ├── html40Special.properties │ │ │ │ │ │ ├── html40Symbols.properties │ │ │ │ │ │ ├── htmlEntityVersions.properties │ │ │ │ │ │ ├── mathml20.properties │ │ │ │ │ │ └── transliterate.properties │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── mathfont.properties │ │ │ │ │ │ ├── mathfontAsanaMath.properties │ │ │ │ │ │ ├── mathfontMathJax_Main.properties │ │ │ │ │ │ ├── mathfontSTIXNonUnicode.properties │ │ │ │ │ │ ├── mathfontSTIXSize1.properties │ │ │ │ │ │ ├── mathfontSTIXSizeOneSym.properties │ │ │ │ │ │ ├── mathfontStandardSymbolsL.properties │ │ │ │ │ │ └── mathfontUnicode.properties │ │ │ │ │ ├── grabber.gif │ │ │ │ │ ├── html │ │ │ │ │ │ └── folder.png │ │ │ │ │ ├── langGroups.properties │ │ │ │ │ ├── language.properties │ │ │ │ │ ├── svg.css │ │ │ │ │ ├── table-add-column-after-active.gif │ │ │ │ │ ├── table-add-column-after-hover.gif │ │ │ │ │ ├── table-add-column-after.gif │ │ │ │ │ ├── table-add-column-before-active.gif │ │ │ │ │ ├── table-add-column-before-hover.gif │ │ │ │ │ ├── table-add-column-before.gif │ │ │ │ │ ├── table-add-row-after-active.gif │ │ │ │ │ ├── table-add-row-after-hover.gif │ │ │ │ │ ├── table-add-row-after.gif │ │ │ │ │ ├── table-add-row-before-active.gif │ │ │ │ │ ├── table-add-row-before-hover.gif │ │ │ │ │ ├── table-add-row-before.gif │ │ │ │ │ ├── table-remove-column-active.gif │ │ │ │ │ ├── table-remove-column-hover.gif │ │ │ │ │ ├── table-remove-column.gif │ │ │ │ │ ├── table-remove-row-active.gif │ │ │ │ │ ├── table-remove-row-hover.gif │ │ │ │ │ └── table-remove-row.gif │ │ │ │ ├── PkgInfo │ │ │ │ └── Resources │ │ │ │ └── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ └── precomplete │ │ └── template │ │ ├── index.html │ │ ├── manifest.webapp │ │ └── style │ │ └── icons │ │ └── Blank.png │ ├── lib │ │ ├── file.js │ │ ├── main.js │ │ ├── pingback-server.js │ │ └── remote-simulator-client.js │ └── tests ├── subprocess │ ├── data │ └── lib │ ├── subprocess.js │ ├── subprocess_worker_unix.js │ └── subprocess_worker_win.js └── vold-utils └── lib └── unload+.js 183 directories, 693 files
ん~、なかなか色々ありますね。気になった所はファイル名に色でも付けておこうかな(めんどいのでしないかもしれないけど)。B2G.appとかは、エミュレータそのものなので必要ないかな?
でも、本体の仕組みがわかんないと困るところもあるだろうから、JavaScriptでできている所は見えたほうがいいんでしょうね。本当ならOSのAPIで提供されるところなんだろうけど、それをそのままファイルで見せてしまったほうがいいってことでしょうか。どこまでオープンにされているか確かめたいところですね。ググったらB2Gのコンパイルの仕方とか出てたので、エミュレータもOSSなのかとちょっと驚く。
まぁ、Mozillaとしては普通なオープン企画なんだろうけど、なかなかできることじゃないよね。IEはもちろん穴ぼこがどんなに開いていても自分達で何とかできないプロプライエタリなソフトだし、Chromeにしたってどこぞからかき集めたOSSを組み合わせたソフトだから、本人たちが作った部分はMozillaに比べて非常に少ない、と思う。コンパイルするだけでうんざりするソフトウェアリポジトリだったりするけど、まぁきちんと成果物がWindowsとMacやLinuxに提供されているので問題ではない。まぁ第三者がもっと使いやすい形であったほうがいいとは思うけど、それで開発が妨げられるぐらいだったらそのままでいい。
profile/webapps/
ってところに、アプリが存在するみたい。Twitterのアプリ(だろうと思われるもの)を見てみると、「twittershare.gaiamobile.org」ってフォルダに「application.zip」、「manifest.webapp」ってのが入ってる。zipって拡張子はわかりやすいですね。たぶん、普通のzipアーカイブでしょう。manifest.webappってのはテキストですね。
application.zipの中身。今度はWindowsのtreeでやってます。UNIX系のtreeの方が見やすい気がする。
│ index.html │ manifest.webapp │ ├─js │ │ activities.js │ │ twittershare.js │ │ │ └─ext │ oauth.js │ sha1.js │ ├─shared │ └─js │ custom_dialog.js │ └─style │ custom_dialog.css │ twittershare.css │ ├─icons │ share.png │ └─images │ close.png │ default.png │ default_profile_2_normal.png │ header.png │ negative.png │ pattern.png │ progress.png │ separator-large.png │ separator.png │ shadow.png │ shadow_input.png │ subheader.png │ twitter-bird-light-bgs.png │ └─ui default.png gradient.png negative.png pattern.png
同じような構成でzipでアーカイブすればアプリが作れる?
この開発環境があるかどうかさえ調べてないですが、自分でディレクトリを作ってやることぐらいはそんなに難しいことも、アーカイブに固めるのもWindowsでもMacでもOSに標準に付いてる機能だと思うので、特に用意する環境ってのも、絵を作るイメージエディタと、文字を書くエディタぐらいで済むんじゃないかと思われ。
細かいところは、後で詳しく調べてみようかね。こんな泥臭い方法じゃなくて、もっとスマートに出来るやり方があるかも知れないし。どちらにしても、HTMLとJavaScriptとビットマップイメージが作れれば出来そうなのは分かった。中身見てないで、拡張子でしか判断してないけど。なんかお手軽すぎやしませんか? まぁ高度なことができなくなるわけではないだろうから、基本が単純な事に越したことはないけど。
今回は場所の関係で、WindowsとMacを行き来しちゃいましたが、基本的には同じ構成だと思います。今度はアプリの中身であるjsファイルを中心に見ていきたいと思います(予定は未定)。
タグ:Firefox OS
コメント 0