2GIS for Blackberry 10

2GISは、すべての主要なプラットフォームに存在するように、常にユーザーの要求を満たすよう努めています。 特に、さらに先に進む予定のある国に関しては。



11月12日、2GISが存在するプラットフォームの数、もう1つ-Blackberry 10で補充。





この重要なイベントに関連して、移植の経験に関するいくつかのポイントを共有したいと思います。



タスクは、「既存のコードベースを新しいプラットフォームに移植してみてください」という簡単かつ簡潔に設定されました。



原則として、新しいプラットフォームへの大規模なコードベースの適応はさまざまな困難に関連付けられることを理解すると、長い骨の折れる作業と完全な絶望感の恐ろしい写真を思わず計算し始めます。 しかし、これは最初です。 目は怖いが、手はやっている。



ドキュメントを使用してWebサイトにアクセスすると、いくつかの人気のある開発プラットフォームが一度にサポートされることに驚くことができます。 つまり、AIR SDK、WebWorks SDK、Android SDK、およびネイティブSDK。



最初の2つは明らかな理由で考慮されなかったと思います。







Android用の既製のアプリケーションを使用して、何ができるかを確認してください。

実際、BlackBerry OS 10.1のAndroidアプリケーションを実行する機能は、残念ながらNDKを使用して作成されたプログラムには適用されないことがわかりました



また、ほとんどのモバイル製品が多かれ少なかれQtフレームワークに関連付けられていることは誰にとっても秘密ではありません。これにより、インストールパッケージの通常の再パッケージ化後にアプリケーションを起動できなくなります。



「ネイティブ」ツールの機能を検討した結果、BlackBerry 10にはQtフレームワークを含む多数のライブラリが含まれているため、移植作業が大幅に簡素化されることがわかります。



一般に、BlackBerry 10はネイティブアプリケーションを作成するための2 + 1の基本的な方法を提供します。



ネイティブコアは、システムおよびハードウェアとやり取りするための高度なオプションを提供しますが、Qtの形式で優れたラッパーがあるため、ここでは使用する意味がありません。



残念なことに、詳しく調べると、不快なニュアンスが現れます。

BlackBerryは、QApplicationとの完全な非互換性よりもやや劣る見事なQtベースのCascadesグラフィックフレームワークを作成しました。



一般に、2GISインターフェースは自給自足型であり、ユーザーと対話するためのネイティブメカニズムの欠如を乗り切ることができます。 少なくとも最初は。



しかし、カスケードシングルではありません。 幸いなことに、BlackBerry 10では、QtGuiに基づいてアプリケーションを作成する機会が不当に注目されていませんでした。 私たちの場合、このツールキットは、コードベースを根本的に作り直す必要がないという点で便利です。 コアネイティブコンポーネントまたはカスケードの一部と対話する柔軟性が残っています。







移植プロセス自体は比較的簡単でした。 アセンブリ環境が使用されるため:





アセンブリ環境の設定についてはすでに 多くのことを話しまし ので、ここでは繰り返しませんが、NDKは32ビットであることを思い出してください。 Linux 64ビット、32ビットライブラリが必要です。 Ubuntuでは、これは「sudo apt-get install ia32-libs」のように解決されます。



このアプリケーションはもともとクロスプラットフォームとして設計されていたため、ほとんどの作業は必要なライブラリの追加と設定の調整にかかっています。 たとえば、動作が遅いため、QGLWidgetはマルチサンプリングの形でアンチエイリアシングを一時的に放棄する必要がありましたが、高dpiのため、これは干渉しません。



endian.hの代わりにgulliver.hを使用するなど、QNXの機能に関する少数の問題がありました。



一般に、ほとんどの時間は、さまざまなチームによってコード全体に均等に散らばっているプラ​​ットフォーム設定の検索に費やされました。



楽観主義の最初の成功した打ち上げの後、大幅に増加しました。

テーマの修正には、「正方形」画面720x720のみが必要でした。 この画面には、Boldシリーズの2つのデバイスQ10とQ5が搭載されています。 プログラムは事前に設定された起動スクリーンセーバーを自動的に選択しますが、これも特に問題ありません。



既存のコードベースの移植は大したことですが、それは戦いの半分に過ぎません。 プログラムは、さまざまなセンサー、測位システムから情報を受信し、「SMSを送信」や「番号をダイヤル」などのシステムツールを介してユーザーと対話できる必要があります。



センサーの操作は、Qt Mobilityを通じて非常に便利に実装されます。 コンパスおよびその他のセンサーの操作に関する詳細情報は、このページにあります



位置決めはQtLocationSubset APIを介して行われます。

ネイティブメソッドを囲む便利なQtラッパーのおかげで、ナビゲーションを操作しても問題は発生しません。



組み込みアプリケーションと対話するために、 呼び出しフレームワークが使用されます。



呼び出しメカニズムは非常に単純です。

たとえば、電子メールをプレビューして送信するには、次のコードを使用できます。



bool SendMail(QString addr, QString subject, QString text) { InvokeRequest request; request.setTarget("sys.pim.uib.email.hybridcomposer"); request.setAction("bb.action.SENDEMAIL"); request.setMimeType("text/plain"); request.setUri(QUrl(QString("mailto:%1?&subject=%2&body=%3").arg(addr,subject,text))); InvokeManager invokeManager; return invokeManager.invoke(request); }
      
      







一般的に、肯定的な側面のほとんどにもかかわらず、軟膏には、QPAプラグインの欠陥/機能に関連するいくつかの問題がいくつかあります。



最初の問題は、QtGuiアプリケーションで動作しない/見つからない「カバーフレーム」(ウィンドウのサムネイルが最小化されている)であり、一般的なスタイルと共に不安定です。



問題はプラグインの腸のどこかにあることを理解したので、次のコード行を検索して見つけます。



  case NAVIGATOR_WINDOW_STATE: { const navigator_window_state_t state = navigator_event_get_window_state(event); const QByteArray id(navigator_event_get_groupid(event)); switch (state) { case NAVIGATOR_WINDOW_FULLSCREEN: mNavigatorEventHandler->handleWindowGroupStateChanged(id, Qt::WindowFullScreen); break; case NAVIGATOR_WINDOW_THUMBNAIL: mNavigatorEventHandler->handleWindowGroupStateChanged(id, Qt::WindowMinimized); break; case NAVIGATOR_WINDOW_INVISIBLE: mNavigatorEventHandler->handleWindowGroupDeactivated(id); break; } break; }
      
      







プラグインを再構築したくない場合は、QAbstractEventDispatcherでこの問題を回避できます。



 #include <bps/bps.h> #include <bps/navigator.h> #include <bps/screen.h> #include <QAbstractEventDispatcher> #include <QApplication> static QAbstractEventDispatcher::EventFilter previous_event_filter = 0; static bool blackberry_event_filter(void *message) { bps_event_t* const event = static_cast<bps_event_t*>(message); if (event && bps_event_get_domain(event) == navigator_get_domain()) { if (bps_event_get_code(event) == NAVIGATOR_WINDOW_STATE) { if(navigator_event_get_window_state(event) == NAVIGATOR_WINDOW_THUMBNAIL) { return false; } } } if (previous_event_filter) { return previous_event_filter(message); } else { return false; } } int main(int argc, char *argv[]) { QApplication a(argc, argv); previous_event_filter = QAbstractEventDispatcher::instance()->setEventFilter(blackberry_event_filter); /* -  PROFIT!!!!! */ return a.exec(); }
      
      







2番目の問題はキーボードです。 むしろ、物理キーボードのサポート、より正確には、レイアウトの変更。 QtGuiアプリケーションでは、レイアウトの変更はサポートされていません。 救いは松葉杖から来ます。それによって、本当に必要な場合、軽disすることはできません。 松葉杖の本質は、キーの組み合わせを傍受し、目的のロケールでクリックイベントをブロードキャストすることです。



QPAプラグインのマイナーな不便さと欠点にもかかわらず、プラットフォームは多くの肯定的な感情を残しています。 このプラットフォームの実行可能性の証拠として、アルファリリースへの移植と導入の主な作業は、1人の開発者の努力で2週間もかからなかったと言えます。



このアプリケーションはBlackBerry App Worldで利用でき、11月29日に最初の更新がリリースされました。



iOSWPAndroidの各ストアで他のプラットフォーム用のアプリケーションをダウンロードできます。



New 2GIS(ベータ版)をリリースしたという事実を誤って見逃した場合は、それをよく理解することをお勧めします。



そして、はい、キエフもなりますが、 後で



All Articles