3

最近始めたインターンシップで、かなり大きな Visual C/C++ プロジェクトを Android に移植する必要があります。昨日、そのトピックについて別の質問をして、移植の概念を見つける手助けを求めました. 自動化されたソリューション(Androidのモノのようなもの)を提案する回答を得ましたが、私のコンセプトを明確に調査した1日後、「手動ソリューション」になりがちです。つまり、WindosおよびVisual固有のものをすべて手動で削除する手に取り、Android で使用可能な関数の下に置き換えます。

今、私の頭に浮かぶ最初のことは、最初にWindows gnu Compilerを使用してVisual固有のものをすべて削除し、その後、Linux gnu Compilerを使用してWindows固有のものをすべて削除することです(さらに、ndkを使用してAndroidで実行可能にします)。

これは、Android が Linux に基づいているため、コードが Linux から Android にほとんど変更されないままであることを望んでいるため、Linux から Android へのステップが非常に小さいと仮定して、Windows から Linux に移植し、Linux から Android に移植することを意味します。カーネル。

さて、私の質問は次のとおりです。これは良い考えですか、それとも Linux から Android への移植も多大な努力なのでしょうか。つまり、Windows から Linux に 1 回、Linux から Android に 1 回という 2 回すべての作業を行うことになります。

それをより良くする方法の提案は大歓迎です!

編集:言及するのを忘れてください、これはより大きなアプリケーションの一部になり、GUIのものは含まれません(もちろん、LinuxからAndroidへのステップは大変な作業になりますが、その原因はわかっています)、上下にあるコンポーネントへのインターフェースだけです.

4

1 に答える 1

2

「Windows のもの」を手動で削除しようとしないでください。

代わりに、「エミュレーション レイヤー」を作成します。プロジェクトで使用されるすべての Windows 関数をヘッダーで定義し、それらの本体を記述します。

したがって、プロジェクトをそのまま維持し、新しいバージョンがあればそれを使用することさえできます。

Windows から Linux に移植する場合、次の「大きな」問題が発生する可能性があります。

  • Windows レジストリ エミュレーション
  • Windows のマルチスレッド モデルと IPC を Linux 用語に翻訳するのは少し難しいです。特に SetEvent と WaitForMultipleObjects
  • GUI (しかし、私は理解しています。あなたは何も持っていません)

Linux→Androidへの移植で一番苦労するのはUIでしょう。ユーザーとのやり取りがない場合は、最初に win->lin を移植することをお勧めします。

必要に応じて、不足しているライブラリを Linux から持ってきてビルドすることができます。

ユーザーとのやり取りが必要な場合は、Java でネイティブ Android フロントエンド アプリを作成し、D-Bus を介してメイン プログラムとやり取りすることをお勧めします。

于 2012-08-21T13:34:42.870 に答える