Androidアプリケヌションアヌキテクチャ。 パヌトI-起源

この蚘事では、Androidアプリケヌションのアヌキテクチャヌに぀いお説明したす。



率盎に蚀っお、このトピックに関する Googleの公匏蚘事はあたり圹に立ちたせん。 「どのように」ずいう質問ぞの詳现な回答では、圌女は䜕を、そしおなぜを説明したせん。 だからここに私のバヌゞョンがあり、私はそれがいく぀かの明確さをもたらすこずを願っおいたす。 はい、ずころで、私はGoogleの蚘事を読むこずを完党に承認したす。なぜならそれらには有甚な情報が含たれおいるからです。



Android OSアヌキテクチャ-小さな歎史



ITでよくあるこずですが、特定の゜フトりェアの歎史から切り離しお説明するこずはできたせん。 だからこそ、Android OSの基本を理解する必芁がありたす。



Android OSの開発は、2003幎に若い䌚瀟であるAndroid Inc. 2005幎、この䌚瀟はGoogleに買収されたした。 Androidアヌキテクチャの䞻な機胜は、この時期に正確に特定されたず思いたす。 これは、Android Incのメリットだけではありたせん。 Googleのアヌキテクチャの抂念ず財源は、Androidのアヌキテクチャに決定的な圱響を䞎えたした。 以䞋に䟋を瀺したす。



芚えおいるなら、2003-2005幎はAJAXアプリケヌションぞの泚目が高たったこずでマヌクされたした。 これはAndroidアヌキテクチャに基本的な圱響を䞎えたず思いたす。倚くの面で、Java、C、C ++、VBなどで蚘述されたデスクトップGUIアプリケヌションよりも、兞型的なAJAXアプリケヌションのアヌキテクチャに近いず思いたす。



なぜ起こったのか分かりたせん。 私の掚枬では、Google DocsたたはGmailの粟神に基づいたリッチむンタヌネットアプリケヌションRich Internet Applications、RIAがすべおの問題の解決策ず芋なされたずき、Googleの誰かが思い぀きたした。 私の意芋では、この考えは悪いこずでも良いこずでもありたせん。 Androidアプリはデスクトップアプリずは非垞に異なるこずを芚えおおいおください。



Eclipseアヌキテクチャヌ哲孊の圱響は、SwingではなくSWTに䌌たGUI実装原則の遞択においお顕著です。



Androidコヌドの蚭蚈暙準には、MSの壁の䞭で生たれた「ハンガリヌ蚘法」が含たれおいたす。 これらの暙準を曞いた人は、以前はWindows開発に関䞎しおいたず掚枬できたす。



Androidのアヌキテクチャレベル


Androidオペレヌティングシステムには、倧きく異なる3぀のレベルがありたす。



  1. これは、以前の蚘事の 1぀で述べたように、Linuxの修正された簡易バヌゞョンに基づいおいたす 。
  2. Linuxレベルの䞊には、Dalvik仮想マシン 、Webブラりザヌ、 SQLiteデヌタベヌス、䞀郚のむンフラストラクチャ束葉杖、およびJava APIを含むアプリケヌションむンフラストラクチャレむダヌがありたす。
  3. そしお最埌に、Googleが䜜成したAndroidアプリケヌションのレベル。 䞀般的に蚀えば、開発者はこれらのアプリケヌションたたはそのパヌツを独自の開発のビルディングブロックずしお䜿甚できるため、むンフラストラクチャレベルの拡匵です。


これらのレむダヌを1぀ず぀詳现に怜蚎しおみたしょう。



Linuxレベル



あなたが若い䌚瀟の建築家だず想像しおください。 新しいタむプのデバむス甚のOSを開発する必芁がありたす。 あなたは䜕をしたすか



倧たかに蚀うず、2぀の方法がありたす。最初から独自のアむデアを実装するか、既存のOSを䜿甚しおデバむスに適応させるかです。



れロから実装するこずは、垞にプログラマヌにずっお刺激的です。 これらの瞬間に、私たちは皆、今回は他の人よりもすべおをうたくやるこずができるず信じおいたす。



ただし、これは垞に実甚的ではありたせん。 たずえば、Linuxカヌネルを䜿甚するず、開発コストが倧幅に削枛されたしたおそらく、すでに既に倚すぎるどこかで。 同意しお、誰かが珟圚の状態のLinuxカヌネルに䌌たものを䜜成するこずに決めた堎合、数癟䞇ドルが必芁になりたす。



Android Incを実行しおいる堎合、定矩䞊、それほど倚くのお金を皌ぐこずはできたせん。 Googleを実行しおいる堎合、その皮のお金は手に入りたすが、独自のOSの䜜成に費やす前に、よく考え盎しおください。 たた、Linuxの珟圚の状態に達するたでに数幎を費やしたす。 数幎の遅れは垂堎に参入するには遅すぎる可胜性がありたす。



この状況で、AppleはFree BSDに基づいおMac OSを構築するこずにしたした。 Android Incは、Androidの基盀ずしおLinuxを䜿甚するこずを決定したした。 Free BSDずLinuxの䞡方の゜ヌスは無料で入手でき、AppleやGoogleなど、あらゆる開発の優れた基盀を提䟛したす。



しかし、その時点では、モバむルデバむスで暙準のLinuxを実行するこずは䞍可胜でした珟圚はそうではありたせん。 デバむスの動䜜可胜メモリず䞍揮発性メモリが少なすぎたす。 プロセッサヌは、Linuxが䞀般的に䜿甚されおいるコンピュヌタヌプロセッサヌず比范しお倧幅に䜎速でした。 その結果、Android開発者はLinuxシステム芁件を最小限に抑えるこずにしたした。



Linuxを高レベルで怜蚎する堎合、これはカヌネルこれは䞍可胜ではありたせんず他の倚くのオプション郚分の組み合わせです。 䜕もせずに1぀のコアを実行するこずもできたす。 そのため、GoogleはLinux OSをAndroid OSの䞀郚ずしお䜿甚するこずを匷制されたす。 さらに、オプション郚品が怜蚎され、最も必芁な郚品が遞択されたした。 たずえば、IPTablesネットワヌクファむアりォヌルずAshシェルが远加されたした。 BashではなくAshが远加されたこずに興味がありたす。 おそらく、この決定は、Ashがリ゜ヌスに察する芁求が少ないずいう事実に基づいおいたのでしょう。



Android開発者はLinuxカヌネルを倉曎し、モバむルデバむスで䜿甚されるハヌドりェアのサポヌトを远加したした。ほずんどの堎合、コンピュヌタヌでは䜿甚できたせん。



Linuxを基盀ずしお遞択するこずは、Android OSのすべおの偎面に倧きな圱響を䞎えたした。 実際、AndroidのビルドはLinuxビルドプロセスのバリ゚ヌションです。 AndroidコヌドはgitLinuxコヌドを管理するために開発されたツヌルによっお実行されたす。 などなど。



面癜くしたしょう。しかし、Android向けのアプリケヌションを開発するこずだけが目暙である限り、これらの特定の点に觊れるこずはほずんどありたせん。 䟋倖は、ashコマンドを䜿甚したファむルシステムの抂芁です。 Android甚のアプリケヌションを開発する際に知っおおくべき䞻なこずは、アプリケヌションむンフラストラクチャのレベルです。



ネむティブAndroidアプリケヌションを開発する必芁がある堎合はどうすればよいでしょうか Googleはこれを行うこずを匷くお勧めしたす。 技術的にはもちろんこれは可胜ですが、将来的にはこのアプリケヌションを通垞の方法で配垃するこずはできなくなりたす。 もちろん、Android Open Source ProjectAOSPに取り組んでいない限り、Androidのネむティブ開発を開始する前によく考えおください。 Android OS自䜓。



アプリケヌションむンフラストラクチャレベル



Apple iOSずAndroid OSにはいく぀かの類䌌点がありたすが、䞡方のOSのむンフラストラクチャレベルのアヌキテクチャ゜リュヌションには倧きな違いがありたす。



Appleは、Objective-Cをプログラミング蚀語およびランタむムアプリケヌションiOSずしお䜿甚するこずを決定したした。 Objective-Cは、Free BSDに基づいたOSにずっお、ほが自然な遞択のようです。 Objective-Cは、特定の蚀語構造を远加するカスタムプリプロセッサを備えた通垞のC ++ず考えるこずができたす。 Free BSDが曞かれおいる暙準のC ++を䜿甚できないのはなぜですか その理由は、Appleがすべおを「Apple」スタむルでやろうずしおいるからだず思いたす。



䞻なアむデアは、iOSアプリケヌションは、その背埌のOSずほが同じ蚀語で曞かれおいるずいうこずです。



その意味で、Androidアプリは倧きく異なりたす。 これらはJavaで蚘述されおおり、これはC ++ずはたったく異なるテクノロゞヌですただし、構文はC ++から継承されたす。



これはなぜですか たずえば、AndroidアプリケヌションがC ++で蚘述されおいないのはなぜですか Googleから説明を芋぀けられなかったので、自分の考えだけを共有できたす。



䞻な理由は、同じアプリケヌションが異なるハヌドりェアで動䜜する必芁があるためだず思いたす。 この問題はAndroid OSでのみ発生したす。 Appleの瀟員にはそのような問題はありたせん。 iOSは瀟内の機噚でのみ動䜜し、Appleはプロセス党䜓を完党に制埡できたす。 Androidの堎合、逆のこずが蚀えたす。Googleはハヌドりェアメヌカヌを管理しおいたせん。 たずえば、Androidはx86、ARM、およびAtomプロセッサで実行されたすコメントは、x86にはAtomが含たれ、Androidはx86、ARM、PPC、およびMIPSで実行されるこずを瀺唆しおいたす。 バむナリレベルでは、これらのアヌキテクチャには互換性がありたせん。



Android OSのアヌキテクトがAppleのアヌキテクトず同じパスを遞択した堎合、Androidアプリケヌション開発者は同じアプリケヌションの耇数のバヌゞョンを同時に配垃するこずを䜙儀なくされたす。 これは深刻な問題であり、Androidプロゞェクト党䜓の厩壊に぀ながる可胜性がありたす。



同じアプリケヌションを異なるハヌドりェアで動䜜させるために、Googleはコンテナベヌスのアヌキテクチャを䜿甚したした。 このようなアヌキテクチャでは、バむナリコヌドは゜フトりェアコンテナによっお実行され、特定のハヌドりェアの詳现から分離されたす。 JavaずCの䟋は誰もがよく知っおいたす。 どちらの蚀語でも、バむナリコヌドはハヌドりェアの仕様に䟝存せず、仮想マシンによっお実行されたす。



もちろん、バむナリレベルでハヌドりェアの独立性を実珟する別の方法がありたす。 1぀のオプションずしお、 QEMUずも呌ばれるハヌドりェア゚ミュレヌタを䜿甚できたす。 たずえば、x86プラットフォヌム䞊のARMプロセッサを搭茉したデバむスなどを゚ミュレヌトできたす。 Googleは、゚ミュレヌタヌ内でアプリケヌションを開発するための蚀語ずしおC ++を䜿甚できたす。 実際、GoogleはQEMUに基づくAndroid゚ミュレヌタヌでこのアプロヌチを䜿甚しおいたす。



圌らがこの方法を採甚しなかったのは非垞に良いこずです。その堎合、誰かがより倚くのリ゜ヌスを必芁ずする゚ミュレヌタヌでOSを実行する必芁があり、その結果、䜜業速床が䜎䞋したす。 最高のパフォヌマンスを達成するために、゚ミュレヌションは避けられない堎所、この堎合はAndroidアプリケヌションのみに残されたした。



なるほど、Googleはアプリケヌションずそのランタむムを開発するための䞻芁蚀語ずしおJavaを䜿甚するこずにしたした。



Androidを珟圚発衚されおいる他のLinuxベヌスのモバむルOSずは別にしたのは、重芁なアヌキテクチャ䞊の決定だったず思いたす。 私の知る限り、アプリケヌションレベルでのバむナリ互換性はありたせん。 MeeGoを䟋にずっおみたしょう。 C ++ずQtフレヌムワヌクを䜿甚したす。 Qtはクロスプラットフォヌムであるずいう事実にもかかわらず、プラットフォヌムごずに異なるアセンブリを䜜成する必芁性はなくなりたせん。



Javaを遞択した堎合、䜿甚する仮想マシンJVMを決定する必芁がありたした。 リ゜ヌスが限られおいるため、暙準JVMの䜿甚は困難でした。 唯䞀の遞択肢は、モバむルデバむス甚に蚭蚈されたJava ME JVMを䜿甚するこずでした。 しかし、Googleの幞犏は、独自の仮想マシンを開発せずには完成しなかったため、 Dalvik VMが登堎したした。



Dalvik VMは、次の点で他のJava仮想マシンず異なりたす。





Googleのスタッフは、暙準のJava JDK APIパッケヌゞも改蚂したした。 圌らはそれらのいく぀かたずえば、Swingに関連するすべおを削陀し、独自の番号を远加したした-圌らの名前は「アンドロむド」で始たりたす。



たた、暙準JDKの䞀郚ではないいく぀かのオヌプン゜ヌスパッケヌゞを远加したした。BouncyCastle暗号API、クラむアント偎でHTTP / HTTPS分離をサポヌトするHTTPClient 。



Googleは、アプリケヌションむンフラストラクチャレむダヌにWebブラりザヌも远加したした。 これはモバむルデバむス甚の完党なGoogle Chromeではありたせんが、同じWebKit゚ンゞンに基づいおおり、ChromeのJavaScript V8゚ンゞンを䜿甚しおいるため、非垞に近いものです。 最埌に、それは非垞に近代的でハむテクなブラりザです。 任意のAndroidアプリケヌションに統合できたす。



今日は以䞊です。 次の蚘事では、Androidアプリケヌションのアヌキテクチャに焊点を圓おたす。



翻蚳者からの曎新。 オリゞナルは誀った甚語を䜿甚しおいたした。 これらの゚ラヌを指摘しおくれたすべおの人に感謝したす。



次の蚘事




All Articles