web-dev-qa-db-ja.com

アプリをiOSからAndroidに移植しています:何を知る必要がありますか?

どのような落とし穴を避けるべきですか?

  • Java言語パラダイムはObjective-C開発者に一貫して誤解を与えますか?私はJavaでプログラミングすることを学びましたが、私は何年もObjective-Cでしか働いていません。
  • AndroidとiOSの間でデザインパターンはどのように異なりますか?
  • 自分で移行を行った場合、Android=のどの部分が混乱したり、本来の知識よりも長く習得したりしましたか?
  • Eclipseは最高のOS X IDE Android向けですか?

ちなみに、私のアプリはUIKitとFoundationに非常に強く結びついているので、Wordの「移植」は誤称かもしれません。実際には、Android用に完全に書き直します。コードの再利用はありません。また、私はAndroidを学ぶためにこれを行っているので、ポートで失敗して、Androidを学ぶよりも、ショートカットをとるのではなく、.


少し背景として、この質問はStackoverflowで私が見る種類の質問によって促されました。多くの場合、誰かがObj-Cを記述しようとしているときに犯す愚かな間違いによって、誰かの背景(C#またはJava)を知ることができます。 Java開発者が目を転がして、「愚かなObjective-C開発者、彼らはこれまでに学ぶことはないのですか?」というような間違いを避けたいと思います。

15
kubi

私はアプリをiOSからAndroidに移植しています。それは私が移植を行うために協力している他の誰かのアプリですが、それでもなおです。

まず第一に、ユーザーベースは、デバイスと対話するための劇的に異なる方法を教えられてきたと言えるでしょう。これの多くは、アプリケーションの実際の設計とデバイスが機能する方法に由来します。

いくつかの一般的なこと:

  • Androidデバイスでは横向きがかなり必要です
  • Androidアプリは、アクティブに使用されていないときも実行を続ける傾向があるため、ネットワークの問題やgpsなどについてこれを考慮する必要があります。
  • デバイスのセグメンテーション、Androidデバイスと画面解像度)がたくさんあります。これは、相対レイアウトと9パッチイメージが非常に便利な場所です。

多くの人が最初に考えていない大きなものYour UI can not be exactly the same on both devices、同じようにできることを確認してください。ただし、iPhone UIをAndroidに移植すると、デバイスはうまく機能しません。

いくつかの理由:

  • ロングタッチのコンテキストメニュー
  • メニューポップアップ
  • デバイスのセグメンテーションにより、解像度とアスペクト比が異なる
  • 使用するのと同じコントロールではありません

バックエンドは、ほとんどの場合、大部分の作業をJavaおよびAndroid SDK 。私の最大の問題は、ユーザーが何を期待しているか、UIの動作と違いから来ており、それが良い場合もあれば悪い場合もあります。

[〜#〜]編集[〜#〜]

私はあなたの質問の実際の部分に答えていないことに気付いたので、ここに行きます(少なくとも私の最高のショット)

Obj-C開発者が誤解している大きな言語パラダイムがあるとは言いませんが、JavaはOOPパースペクティブ。(私は.NETとJavaを使用していて、十分なObj-Cしか知らないので、実際に作業していると言うべきです)。

私は間違いなくEclipseを使用しましたが、しばらくIntellijIdeaを使用していましたが、特定のことを実行しようとするときに多くの問題が発生しました。

11
msarchet

[この回答は、一種のばかげた言動です。削除するつもりでしたが、面白いかもしれないと思ったので、削除する必要がある場合はコメントでお知らせください]。

Androidでは動作しませんが、JavaとiOS(Obj-C)で動作します。 Javaの開発で実際に異なるのは、IDEがどれだけ役立つかです(人々はIDEを使用しないように指示しますが、これはまったく同じことです)。しかし人々はこれをJavaでアドバイスします)。 XCodeは通常、最も単純な構文エラーを正確に検出することさえできません(言語の構造のため)。一方、Javaでは、IDEを使用すると、それがない場合よりも速く移動できます。また、呼び出し元のプログラミングやメソッドの記述など、本当にクールなこともできます。たとえば、Eclipseでは、

blah.doIt(firstObj, secondObj);

firstObjsecondObjStringインスタンスであり、IDEはsig "public void doIt(String firstObj、String secondObj)。」それは本当にクールで、氷山の一角です。IDEはあなたの友達です。 IntelliJはもっとクールかもしれないと聞いたことがあります(ただし、私の試用版ではそうではありませんでした)。

この答えには落とし穴がありますか? IDEはObj-CとJavaで同じ役割を果たすと考えています。 Javaでは、IDEを使用して、自分では驚くほど難しいことを実行できます。自動リファクタリングは、Javaの方法により、XCodeの100倍強力です。つまり、設計の質問を後で延期することができます。

3
Dan Rosenstark