SSブログ

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」以下のディレクトリ構成となっております。

って長いな。気になるところをあとでピックアップ。
├── 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
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。