私はほぼ独占的に「ビジネス/ユーティリティ/生産性」アプリケーションに取り組んでいることに注意してください。かなり標準的なUI要素に大きく依存し、プラットフォームとの統合が期待されるもの。この答えはそれを反映しています。まったく異なる状況にあるゲーム開発者への良いコメントについては、ShaggyFrogの回答に対するMitchLindgrenのコメントを参照してください。
@ShaggyFrogはここでは間違っていると思います。C ++で効果的なテスト済みのコードがある場合、AndroidとiPhoneの間で共有しない理由はありません。私はそれを実行するプロジェクトに取り組んできましたが、非常に成功する可能性があります。ただし、避けるべき危険があります。
最も重要なのは、「最小公分母」に注意することです。自己完結型のアルゴリズムコードは、非常によく共有されます。スレッドを管理したり、ネットワーク上で通信したり、OSと対話したりする複雑なフレームワークは、プラットフォームのパラダイムを破り、すべてのプラットフォームで同じように機能しないLCDを撮影することを強制しない方法で行うのがより困難です。 。特に、プラットフォームのフレームワークを使用してネットワークコードを作成することをお勧めします。これには、多くの場合、最上層がプラットフォーム固有で、最下層がプラットフォーム固有であり、中間が移植可能である「サンドイッチ」アプローチが必要です。注意深く設計すれば、これは非常に良いことです。
スレッド管理とタイマーも、プラットフォームのフレームワークを使用して実行する必要があります。特に、Javaはスレッドを多用しますが、iOSは通常、スレッドを回避するためにrunloopに依存しています。iOSがスレッドを使用する場合、GCDが強く推奨されます。繰り返しになりますが、ここでの解決策は、真に移植可能なアルゴリズムを分離し、プラットフォーム固有のコードにその呼び出し方法を管理させることです。
スレッド化が進んでいて、ネットワークやUIコードが大量に分散している複雑な既存のフレームワークがある場合、それを共有するのは難しいかもしれませんが、それでも、書き直すのではなく、リファクタリングする方法を探すことをお勧めします。
Linux、Windows、Androidで共有されるクロスプラットフォームコードを幅広く扱うiOSおよびMac開発者として、Androidは共有するプラットフォームの中で群を抜いて最も厄介であると言えます(Windowsはこの区別を保持していましたが、Androidは吹き飛ばされましたそれを離れて)。Androidには、コードを共有することが賢明でない場合がほとんどです。しかし、コードを再利用する機会はまだたくさんあるので、それらを追求する必要があります。