アプリケーションに優れたユーザーエクスペリエンス(UX)を作成することは、特に組み込みアプリケーションを開発している場合、大変な作業です。現在、組み込みソフトウェアの開発に一般的に利用できるグラフィカルユーザーインターフェイス(GUI)ツールには2つのタイプがあります。複雑なテクノロジを使用するか、非常に高価です。
ただし、既存の確立されたツールを使用して、デスクトップ、モバイル、組み込みデバイス、および低電力Linux ARMデバイスで実行されるアプリケーションのユーザーインターフェイス(UI)を構築する新しい方法の概念実証(PoC)を作成しました。 。この方法では、AndroidStudioを使用してUIを描画します。 TotalCrossを使用して、デバイスでAndroidXMLをレンダリングします。 KnowCodeと呼ばれる新しいTotalCrossAPI。アプリケーションを実行するためのRaspberryPi4。
AndroidStudioの選択
TotalCross APIを使用して、アプリケーション用のレスポンシブで美しいUXを構築することは可能ですが、Android StudioでUIを作成すると、プロトタイピングから実際のアプリケーションまでの時間が短縮されます。
アプリケーションのUIを構築するために利用できるツールはたくさんありますが、Android Studioは、世界中の開発者が最も頻繁に使用するツールです。このツールは大規模に採用されているだけでなく、非常に直感的に使用でき、単純なアプリケーションと複雑なアプリケーションの両方を作成するのに非常に強力です。私の意見では、唯一の欠点は、ツールを使用するために必要なコンピューティング能力です。これは、VSCodeやそのオープンソースの代替手段であるVSCodiumなどの他の統合開発環境(IDE)よりもはるかに重いです。
これらの問題を検討することで、Android Studioを使用してUIを描画し、TotalCrossを使用してAndroidXMLをデバイス上で直接実行する概念実証を作成しました。
UIの構築
PoCでは、温度などを制御する家電アプリケーションを作成し、LinuxARMデバイスで実行できるようにしたいと考えていました。
Raspberry Pi用のアプリケーションを開発したかったので、AndroidのConstraintLayoutを使用して848x480(Raspberry Piの解像度)の固定画面サイズのUIを構築しましたが、他のレイアウトでレスポンシブUIを構築できます。
Android XMLは、UI作成に多くの柔軟性を追加し、アプリケーションのリッチなユーザーエクスペリエンスを簡単に構築できるようにします。以下のXMLでは、ImageViewとTextViewの2つの主要コンポーネントを使用しました。
<ImageView
android:id="@+id/imageView6"
android:layout_width="273dp"
android:layout_height="291dp"
android:background="@drawable/Casa"
tools:layout_editor_absoluteX="109dp"
tools:layout_editor_absoluteY="95dp" />
<TextView
android:id="@+id/insideTempEdit"
android:layout_width="94dp"
android:layout_height="92dp"
android:background="#F5F5F5"
android:text="20"
android:textAlignment="center"
android:gravity="center"
android:textColor="#000000"
android:textSize="67dp"
android:textStyle="bold"
tools:layout_editor_absoluteX="196dp"
tools:layout_editor_absoluteY="246dp" />
TextView要素は、建物内の温度など、一部のデータをユーザーに表示するために使用されます。ほとんどのImageViewは、ユーザーがUIを操作するためのボタンとして使用されますが、画面上のコンポーネントによって提供されるイベントを実装するためにも必要です。
TotalCrossとの統合
このPoCの2番目のテクノロジーはTotalCrossです。次の理由により、デバイスでAndroidの機能を使用したくありません。
- 私たちの目標は、LinuxARMに優れたUIを提供することです。
- デバイスの設置面積を小さくしたい。
- アプリケーションを、コンピューティング能力の低いローエンドのハードウェアデバイス(GPUがない、RAMが少ないなど)で実行する必要があります。
まず、VSCodeプラグインを使用して空のTotalCrossプロジェクトを作成しました。次に、ドローアブル内に画像のコピーを保存しました フォルダとXML内のAndroidXMLファイルのコピー フォルダ-どちらもリソース内にあります フォルダ:
TotalCross Simulatorを使用してXMLファイルを実行するために、KnowCodeと呼ばれる新しいTotalCross APIと、XMLをロードするためのMainWindowを追加しました。以下のコードは、APIを使用してXMLをロードおよびレンダリングします。
public void initUI() {
XmlScreenAbstractLayout xmlCont = XmlScreenFactory.create(“xml / homeApplianceXML.xml”);
swap(xmlCont);
}
それでおしまい! 2つのコマンドだけで、TotalCrossを使用してAndroidXMLファイルを実行できます。 TotalCrossのシミュレーターでのXMLのパフォーマンスは次のとおりです。
このPoCを完了するには、2つのことが残っています。ユーザーとの対話を提供するイベントを追加することと、RaspberryPiで実行することです。
KnowCode APIは、ID(getControlByID)によってXML要素を取得し、その動作を変更して、イベントの追加、可視性の変更などを行う方法を提供します。
たとえば、ユーザーが自宅や他の建物の温度を変更できるようにするために、UIの下部にプラスボタンとマイナスボタンを配置し、ボタンがクリックされるたびに温度を1度上げたり下げたりする「クリック」イベントを配置します。
Button plus = (Button) xmlCont.getControlByID("@+id/plus");
Label insideTempLabel = (Label) xmlCont.getControlByID("@+id/insideTempLabel");
plus.addPressListener(new PressListener() {
@Override
public void controlPressed(ControlEvent e) {
try {
String tempString = insideTempLabel.getText();
int temp;
temp = Convert.toInt(tempString);
insideTempLabel.setText(Convert.toString(++temp));
} catch (InvalidNumberException e1) {
e1.printStackTrace();
}
}
});
RaspberryPi4でのテスト
最後に、最後のステップです!デバイス上でアプリケーションを実行し、結果を確認しました。アプリケーションをパッケージ化し、ターゲットデバイスにデプロイして実行する必要がありました。 VNCを使用して、デバイス上のアプリケーションを確認することもできます。
アセット(画像など)、Android XML、TotalCross、KnowCode APIを含むアプリケーション全体は、LinuxARMで約8MBです。
これがアプリケーションのデモです:
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
この例では、アプリケーションはLinux ARM専用にパッケージ化されていますが、同じアプリがLinuxデスクトップアプリ、Androidデバイス、Windows、Windows CE、さらにはiOSとして実行されます。
すべてのサンプルソースコードとプロジェクトは、HomeApplianceXMLGitHubリポジトリで入手できます。
組み込みアプリケーション用のGUIの作成は、今日ほど難しいものである必要はありません。この概念実証は、組み込みシステムだけでなく、すべて同じコードベースを使用するすべての主要なオペレーティングシステムに対して、このタスクを簡単に実行する方法に関する新しい視点をもたらします。
私たちは、デザイナーや開発者がUIアプリケーションを構築するための新しいツールを作成することを目指していません。私たちの目標は、すでに利用可能な最高のツールを使用するための新しい可能性を提供することです。
アプリを作成するこの新しい方法についてどう思いますか?以下のコメントであなたの考えを共有してください。