Embarcadero FireMonkeyでのモバむルアプリケヌション開発FMX 6

同じコヌドを䜕床も曞くこずを奜む人はいたせんが、モバむルアプリケヌションを䞀床に耇数のプラットフォヌムに実装する必芁がある堎合は、これを行う必芁がありたす。 残念なこずに、䌚瀟のプログラマヌは、それぞれの堎合、さたざたなツヌル、スキル、アプロヌチを䜿甚する必芁がありたす。 もちろん、アプリケヌションを転送するずきには、少なくずもプログラミング蚀語を倉曎する必芁はないずいう芁望がありたす。



そのため、今回はモバむルアプリケヌションの開発の難しさを考えお、叀代ロシアの倢に挑戊する誘惑に抵抗するこずはできたせんでした。 少しきしみながら、「ストヌブ」が先に行ったずしたしょう。



そのため、ご存知のように、モバむルアプリケヌションのクロスプラットフォヌム開発で䜿甚されるいく぀かのアプロヌチがありたす。 これらの゜リュヌションにはそれぞれ欠点があり、堎合によっおは、以䞋の出版物のいずれかで提瀺するさたざたなアプロヌチの比范分析がありたす。 ここでは、そのような楜噚の1぀にのみ焊点を圓おたす。この楜噚は、倚くのナニヌクな機胜を備えおいたすが、聎衆には倚少無芖されおいたす。



FireMonkeyは、悪名高いEmbarcadero瀟の補品です。 FireMonkeyはRAD Studio開発環境の䞀郚です。 基盀ずなるFMX゚ンゞンは、圓瀟の同胞がか぀お開発したものであり、ナヌザヌむンタヌフェむスを構築するためのクロスプラットフォヌムフレヌムワヌクであるFlashたたはWPFに䌌おいたす。 同時に、前述の補品ず同様に、FMXはベクタヌグラフィックスずハヌドりェアアクセラレヌションを䜿甚したす。 補品はほんの数幎前に登堎したしたが、この間に5぀のアップデヌトがリリヌスされたした。 私はこの補品が悪名高いDelphi .NETの運呜に苊しむこずはないず信じたい。



アプリケヌションはマシンコヌドに盎接コンパむルされ、これはこの゜リュヌションの䞻な特城の1぀です。 こうした驚くべき状況に関連しお、゚ンバカデロは理論的にはネむティブアプリケヌションレベルでの党䜓的なパフォヌマンスを玄束したす。 FireMonkeyでは、DelphiおよびC ++ Builderで構築されおいるため、PascalおよびC ++でアプリケヌションロゞックを実装できたす。 同じFireMonkeyFMアプリケヌションコヌドをコンパむルしお、Windows、iOS、Androidで動䜜させるこずができたす。 この領域には倚数のプログラマヌがいたため、C ++で開発を行う機䌚に惹かれたした。 したがっお、操䜜性をテストするためにむンストヌルされたのは、RAD Studio XE6のC ++ Builderバヌゞョンでしたが、Delphi゚ディションは、䜿甚されおいるプログラミング蚀語以倖の違いはないはずです。



アプリケヌションの組み立お



コンパむラの䜜成の背埌にある乱流の䞭で、補造業者はFireMonkeyにx86およびARMv7甚のネむティブC ++コンパむラを装備したした。 これにより、開発環境が実行されおいるコンピュヌタヌで盎接コンパむルできたす。 C ++たたはPascalでプログラミングし、出力で必芁なARMマシンコヌドを取埗する機䌚を提䟛するのは、独自のコンパむラの存圚です。 ただし、アプリケヌションの構築リンク、眲名、デバむスでの実行、およびデバッグには、モバむルプラットフォヌムの開発ツヌルSDKの元のツヌルが匕き続き䜿甚されたす。 したがっお、開始する前に、次の手順を実行する必芁がありたす。



iOS Android
Macを持っおいる ---
iOS開発者プログラムにサむンアップする Android Developerにサむンアップする
蚌明曞を取埗する開発者、プロビゞョニング アプリケヌション眲名キヌを生成する
iOS SDKをダりンロヌドしおむンストヌルする Android SDKずNDKをダりンロヌドしおむンストヌルする
MacにPAServerをダりンロヌドしおむンストヌルする ---
RAD StudioずPAServer間の接続を構成する ---


RAD StudioずAndroidツヌルキットの䞡方がPC䞊で動䜜するため、Androidの開発に必芁な身䜓の動きはiOSの堎合よりもわずかに少なくなりたす。 iOSアプリケヌションをビルドするには、Mac OSが必芁ですAppleのみがSDKをリリヌスするため。 したがっお、アプリケヌション開発がPC䞊で行われる堎合、䜕らかの方法で通信する必芁がありたす。 䞋の図から、付属のEmbarcadero PAServerプラットフォヌムアシスタントサヌバヌを䜿甚しお、iOSアプリケヌションがPCを介しおどのようにアセンブルされるかを確認できたす。







䟋



FireMonkeyテストの䞀環ずしお、単玔なアプリケヌションHello worldレベルを開発したした。この䟋では、提案された技術の操䜜性を確認したいず考えおいたした。



以䞋は、Windows甚のこのアプリケヌションのバヌゞョンのスクリヌンショットず、簡単な操䜜でダむナミクスを確認できる短いビデオです。



画像





このアプリケヌションには、ほずんどコヌドが含たれおいたせん。 それにもかかわらず、私たちは私たちがやったこずを正確に教えたす。



このケヌスでは、パフォヌマンスだけでなく、さたざたなプラットフォヌムでのナヌザヌむンタヌフェむスの倉化に関心がありたしたが、それは「日垞」ずいう意味です。 ぀たり、ナヌザヌは1秒あたりの浮動小数点挔算の数を気にしたせんが、アプリケヌションがそのアクションにどれだけ゜フトか぀迅速に応答するかを気にしたす。



このアプリケヌションはいく぀かの暙準コントロヌルで構成されおおり、ナヌザヌアクションハンドラヌのペアが含たれおいたす。 画面の䞊郚には「ねじれ」があり、これを動かすず、写真を巊に回転できたす。 テストのこの郚分は、FMXが2次元グラフィックスを描画する胜力をテストするため、たたはラスタヌ操䜜を実行するために必芁でした。



少し䞋にある進行状況バヌには、ホむヌルが蚭定されおいる角床の珟圚の倀が衚瀺されたす。 UIスレッドの盞互䜜甚を確認し、さたざたなプラットフォヌムでこの芁玠のスタむルを確認する必芁がありたす。



ホむヌルタヌンハンドラヌ

//--------------------------------------------------------------------------- void __fastcall TForm1::DialAngleChange(TObject *Sender) { // Every time the angle dialer is spinned, assign // its current value to the Image control... imgLogo->RotationAngle = 360 - DialAngle->Value; // The progress bar will get updated with a normalized angle value pbAngle->Value = (int)fabs(DialAngle->Value)%360; } //---------------------------------------------------------------------------
      
      





ご芧のずおり、これは通垞のC ++ですが、Delphiのレガシヌには少し「汚」です。



以䞋は、次のHWハンドラヌを備えた埓来のボタンですただし、ボタンにそれほど䌌おいたせん。

 //--------------------------------------------------------------------------- void __fastcall TForm1::btnHelloClick(TObject *Sender) { // A simple HW assignment btnHello->Text = "Hello world!"; } //---------------------------------------------------------------------------
      
      







右偎には、日付を遞択するためのフィヌルドDateTimePickerがありたす。 私たちは䞻に、モバむルOSでの圌の倖芳に関心がありたした。それぞれの堎合にネむティブコントロヌルたたは描画されたものが䜿甚されるかどうかです。 同じ理由で、スラむダヌずON / OFFスむッチは以䞋に埓いたす。 ただし、このスむッチには別の機胜が远加されおいたす。暙準のFMX芖芚効果ラゞアルブラヌの1぀が含たれおいたす。FMXが独自にコントロヌルを描画するか、この䜜業をモバむルOSに委任するかどうかを確認したす。 結果は明らかではなかったため、以䞋でこの問題に戻りたす。



䞀番䞋には、2぀の列がある衚がありたす。 この衚には、慣性スクロヌルがありたすが、デスクトップアプリケヌションの特城がありたす。 私たちは、携垯電話でそれをどのように䜿甚するかを確認したかったのです。 目がしがみ぀くように、テヌブルはアプリケヌションの開始時に埋められたす。

 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // Initialize the string grid with a bit of texts // Define the number of items gdDemo->RowCount = 1000; // Generate the texts for every Row and Column for(int r = 0; r < gdDemo->RowCount; r++) { gdDemo->Cells[0][r] = "iResearchFX"; gdDemo->Cells[1][r] = IntToStr(r+1); } } //---------------------------------------------------------------------------
      
      







線集





コンパむルは非垞に遅くなりたす-通垞通り、C ++ Builderはなんずなく緊匵したす。 しかし、長幎にわたっお、C ++コンパむラはそれを速くしたせんでした。



モバむルデバむス甚のバヌゞョンで同じアプリケヌションを芋る時が来たした。 アプリケヌションのコヌドやナヌザヌむンタヌフェむスを倉曎する必芁はありたせん。 プロゞェクトのいく぀かの蚭定を倉曎するだけで十分です。これらの蚭定は、「簡単な動き」によっおタヌゲットプラットフォヌムを倉曎できるように䜜成されたものです。



プラットフォヌムの切り替えは簡単です-IDEでは、むンタヌフェむスのこの偎面は意図的に劥協なく行われたす。 デバッグたたはリリヌスコンパむル、タヌゲットプラットフォヌム、シミュレヌタヌ、たたはデバむスを遞択し、アセンブリが内郚のニヌズたたは発行のために実行されるかどうかを個別にマヌクする必芁がありたす。 埌者の堎合、蚌明曞に眲名する必芁がありたす。 Android蚌明曞、ただ持っおいない堎合は、開発環境から盎接生成するようにすぐに招埅されたす。 そしお、iOSプロファむルは、最終ビルドフェヌズが実行されるMac䞊にある必芁がありたす。



Androidセクションには、Android SDKで蚭定されたすべおのシミュレヌタヌず、接続されおいるすべおのデバむスがリストされおいるこずが簡単にわかりたす。



iOSセクションでは、オプションはXcodeのセットを正確に繰り返したす-シミュレヌタヌのアセンブリず起動がリモヌトMac OSマシンで実行されるこずを考えるず、これは驚くこずではありたせん。






巊は、アプリケヌションが䞻芁なモバむルプラットフォヌムでどのように芋えるかを瀺しおいたす。



気付くのは簡単です-そしお、これは心匷いこずです-倖芳はあたり倉わりたせんでしたが、逆に、アプリケヌションは理解できないほど倉わりたしたが、今では各プラットフォヌムのむンタヌフェむスをれロから䜜成した堎合ずたったく同じに芋えたす。 これは、FMXをテストしたい誘惑です。 Qtを初めお䜿甚する喜びのようですね



これはただ同じアプリケヌションですが、すべおのコントロヌルがプラットフォヌムごずに「ネむティブ」に倉曎されおいるこずがわかりたす。 これは、私たちの意芋では、GUIアプリケヌションの真のクロスプラットフォヌム開発ず蚀えるでしょう。


モバむルアプリケヌションの準備ができたした 物理的なAndroidデバむスHTC Oneで䜜成されたスクリヌンビデオの䟋で、圌の䜜品をラむブで芋るこずをお勧めしたす。 ビデオはほずんど同じです。統蚈甚に2぀のビデオを䜜成したした。



ビデオは、アプリケヌションのいく぀かの偎面を瀺しおいたす。

  1. 開始時間。 「コヌルド」スタヌトに぀いお話しおいる堎合、Android-e䞊のすべおのアプリケヌションは非垞に速く起動しないず考えられおいたす。 ここで、開始時に玄2秒が倱われおいるこずがはっきりずわかりたすビデオの冒頭の黒い画面。 これが倚いかどうかはあなた次第ですが、私たちの意芋では、それはアプリケヌションのタむプに倧きく䟝存したす。
  2. 仕事のスピヌド。 特別な苊情はありたせん-むンタヌフェむスは非垞にうたく機胜したす。
  3. コントロヌル すべおの芁玠はネむティブのものに眮き換えられ、非垞にAndroydの印象を䞎えたす。
  4. グリッド モバむルプラットフォヌムにずっおは面癜く、非垞に機胜しおいたす。むンプレヌスセル線集もありたす。




死埌





新しく䜜成したAndroidアプリケヌションの内郚を芋おみたしょう。



APKアヌカむブは、6 MBずいう非垞に具䜓的なサむズです。 どうやら、叀いDelphiの䌝統によれば、ランタむムラむブラリ党䜓がそこに匕き蟌たれたようです。



APKアヌカむブ内には、次のフォルダヌ構造がありたす右偎に衚瀺。 ネむティブコンパむラARMv7およびNDKが正確に䜿甚されたこずを瀺唆するかのように、動的ラむブラリsoの存圚が目を匕きたす。



libフォルダヌにはアヌキテクチャの名前を持぀サブフォルダヌが含たれおおり、それぞれに䜕らかの理由でlibProject1.soず呌ばれるアプリケヌションがあるこずに泚意しおみたしょう。 したがっお、armeabi-v7aフォルダヌにあるのは本物であり、サむズは玄21 MBアンパックです。 残りのラむブラリファむルは既補のクラッパヌスタブであり、ナヌザヌのアヌキテクチャがARMv7ず異なる堎合にナヌザヌの顔にメッセヌゞを衚瀺したす。 補造業者はこれを正盎に認めおおり、これたでのずころ他に䜕も残しおいたせん。



classes.dexファむルにはアプリケヌションがたったく含たれおいたせんが、メむンFMXアプリケヌションラむブラリのJavaロヌダヌず、ネむティブAndroidコントロヌルのラッパヌの実装が含たれおいたす。 このフラグメントにより、アプリケヌションがOSず察話し、通垞のAndroidアプリケヌションになりすたすこずができたす。



ネむティブ床



ビデオで目立぀ようになるず、FMX゚フェクトは「ネむティブ」Androidコントロヌルに倧きな圱響を䞎え続け、レンダリングを劚害したすたずえば、コントロヌルの茪郭のグロヌをオンにしたこずもありたす。぀たり、FMXはAndroidコントロヌルずは異なり、写真付きですが、非垞にタむトです。



Sebastian GingerSEBASTIAN PR GINGTERは、よく知られおいるFMXの蚘事で、ナヌザヌむンタヌフェむスが独立した方法で描かれ、どのプラットフォヌムでもネむティブに芋えないずいう事実を厳密に批刀しお、フレヌムワヌクに぀いお非垞に䞍平を述べおいたす。 どうやら、ある時点でこれはたさにそうでしたが、今ではそのような批刀は公正ずは芋なされたせん。 著者は、このアプロヌチの朜圚的な利点を吊定しながら、特定の実装に関係なく、クロスプラットフォヌムのGUIアプリケヌションずいう抂念を吊定しおいたす。



おわりに



もちろん、考慮されるツヌルは、VCLのすべおの䌝統栄光ず䞍誠実の継続です。 真のクロスプラットフォヌムモバむルアプリケヌションのアセンブリテクノロゞヌが機胜し、非垞に優れたパフォヌマンスを発揮するこずを確認したした。 特定のクラスのアプリケヌションでは、FMXが非垞に圹立ちたす。



マむナス面には、起動時の顕著な遅延ず、結果ずしお生じるアプリケヌションのサむズが小さいこずが含たれたす。



䜿甚材料



  1. Embarcaderoドキュメント
  2. FMでの開発プロセスの説明
  3. XE6のARMスタブ
  4. 非ネむティブむンタヌフェむスの批刀



All Articles