web-dev-qa-db-ja.com

Objective-CおよびAndroid

私はAndroidの比較的大規模なプロジェクトを終えたばかりですが、太陽系のこちら側で最もユビキタスな携帯電話の1つ(フルーティーな小さな携帯電話によるもの)では決して実行されないという知識で、口の中に苦い味が残っていますクラブ)。

したがって、次のプロジェクトでは、ほとんどのコンポーネントをiPhoneとAndroidプラットフォーム間で簡単に移動できるようにする方法で記述したいと思います。これを行うために考えている方法は、そのほとんどをObjective-Cでコーディングし、プラットフォーム固有の部分をさらにObjective-CとJava)に追加します。Android側では、これNDKを使用する必要があります。

私のCの知識は良いですが、Objective-Cの知識はゼロに近く、C++を学びたいとは思っていません。上記のアプローチはどれほど正気ですか、そしてより良いものはありますか? Javaでコーディングしても、ハッキングされていないiPhone市場に到達する方法はありますか?そして、私が知っている人々(iPhoneユーザー)がAndroid電話?

18
Tom R

一歩下がって、最終的に何を論理的に共有できるかを考えてください。

UIモデルはかなり異なり、コンポーネントも異なります。結局、共有できるのはデータオブジェクトクラスであり、おそらくいくつかのアルゴリズムです。ソケットを直接使用しておらず、HTTPライブラリを使用しているため、昔のように現実的にネットワークコードを共有することになるとは限りません。

それで、あなたがこれに注いでいるすべての努力は本当に最終的に見返りを見つけるでしょうか?最終的な結果は、更新が難しく、どちらかで優れているのではなく、両方のプラットフォームで平凡な、もろい混乱になるように思われます。

なぜアプリケーションを書いているのですか?あなたやあなたのユーザーの生活を楽にするために?

基本的にこれを言っている人もいますが、もっと明確にしたいと思います。あなたの最善の策はおそらく書くことです:

  1. クロスプラットフォームのデータモデルとコアロジック、以下を使用:
    • GNUstep (Obj-C)のビット、または
    • CF-Lite (C)、または
    • クロスプラットフォームである限り、あなたが望むものは何でも:P
  2. cocoa Touch(Obj-C)を使用したiPhoneのみのインターフェースコード
  3. Android専用のインターフェースコードですが、Android用です。

それはあなたが得ることができる限り近いです。クロスプラットフォームを作成しようとするとinterfaceコードは、間違いなく両方のプラットフォームで平凡なアプリになります。しかし、コードの残りすべてを移植可能にし、デバイス固有のインターフェイスをラップするだけで完了します常にそして一部のiPhone開発者にとってはうまく機能しています。

15
andyvn22

Cocoaを使用しないObjective-Cはそれほど有用ではなく、iPhoneコードベースが機能するようになることはあまりありません。 Core Foundationを使用してCでコアを記述し、プラットフォーム固有の部分にJavaまたはObjective-Cを使用する方がよいでしょう。AppleがオープンしていますCore Foundationの大部分をCF-Liteとして調達し、OS X上のCocoaと無料でブリッジしました(つまり、多くのCFクラスをCocoaの対応するクラスと交換可能に使用できます)。

11
Chuck

私の推測では、それをバックアップした経験はありませんが、おそらくあなたは たぶん......だろう どういうわけか、GCCがARM用に存在し、オープンソースであり、Obj-Cコンパイラと基本的なObj-Cランタイムを備えていることを考えると、GoogleのNDKを使用してObj-Cを作成します(まだハッキングされていない場合は、新しいアーキテクチャ)など。

それはまた、疑わしい利益のために多くの仕事になるかもしれません。

そしてもちろん、「Obj-C」(NSクラスなし)は、ほとんどの人が使用している「Cocoa」とは非常に異なる意味を持ちます。 本当に 彼らが「Obj-C」と言うときを意味します。 GNUstepの一部をその一部に再利用できるかもしれませんが...正直なところ、私はそれを疑っています。大変な作業のように聞こえます。

だから、はい、それは可能だと思います。それも大変な作業であり、それだけの価値はないと思います。

あなたが言ったことを考えると、私がこれを試みた場合、私はあなたのコアロジックをできるだけ多くCで書き、それをプラットフォームごとに2つの別々のGUIでラップしたくなるでしょう。

9
asveikau

Apportable SDK は、一度記述してIOSとAndroidの両方にデプロイするObjective-Cアプローチです。実行中のIOS XcodeプロジェクトをAndroid SDKに。

ダウンロード後数分で両方のプラットフォームで実行されるサンプルアプリについては、 ここ を参照してください。

2
Paul Beusterien

別の角度から考えてみましょう... Javaを使い続けたいとおっしゃっていたと思いますが、C#を知っていれば、iPhone用のMonoTouchフレームワークを使用できます。 Monoは、本質的には.Netスタックのオープンソース実装です。 MonoチームはMonoをAndroidに移行することに取り組んでいるため、基本的にビジネスロジック用の共有C#ライブラリを作成し、プラットフォームごとに異なるビュー/コントローラーを使用できます。もちろん、これはすべてC#になります。そしてそれは少し高価ですが、それは異なる言語ですべてを書くという問題を解決します。

IPhoneでは MonoTouch 、AndroidではMonoDroidと呼ばれていると思います。

2
Ryan Ferretti

XMLVMは、(一部の)AndroidアプリケーションをiPhoneに変換できるプロジェクトです。詳細については、 http://xmlvm.org/Android/ をご覧ください。

1
wvdschel

Androidについてはよくわかりませんが、iPhoneを使用すると、Objective-Cクラスでラップする限り、基本的にストレートCを記述できます。

1
James Raybould

これは、2つのチーム(ドロップボックスとオーケストラ)が同様のアプローチを使用したFacebookのモバイル@スケール会議からの講演です。 DropboxはC++を使用してlibdropboxを作成し、Orchestra(メールボックス)はObjective-cを使用してlibmailboxを作成しました。

繰り返しになりますが、彼らはフロントエンドをプラットフォームの母国語で記述し、コアロジックとデータにクロスプラットフォームのライブラリを使用しました。

私が奪った主な利点:メールボックスは、UIコードを作成するだけだったため、5週間でiOSからAndroidに移行しました。 Dropboxは、共有ライブラリにあるコア機能への変更をAndroidベータ展開でベータテストできます。ベータビルドでは、大規模な展開を行う方が簡単でした。

1
Jon

私はまだこれを試したり、トークを見終わったりしていませんが、YouTubeでGoogle Tech Talkがあります Javaを使用したiPhoneアプリケーションの開発 かなり有望に見えます。

1
Yanik Magnan

これは少し遅れるかもしれませんが、業界は最近、アプリの移植性を実現するためにWebアプリの方向に進んでいるようです。つまり、「スケルトンネイティブアプリ」にWebブラウザーを埋め込み、Android、iOS、およびその他の主要なスマートフォンプラットフォーム用のjavascript、css、およびhtmlを記述します。

これを支援するツールがあります。 PhoneGap および Sencha Touch をチェックアウトすることをお勧めしますが、他にもたくさんあります。このアプローチは、リアルタイム/アニメーションを多用するアプリには理想的ではない可能性があることに注意してください。

1
kristianlm

Objective-CランタイムはまだAndroidに移植されていません。それほど手間はかからないはずですが、それでも、言語の実用的な知識がなければ、簡単な時間があるとは思えません。それを移植します。

あなたがやろうとしていることは、一般的なアプリケーションでは難しいでしょうが、プレーンCでゲームを開発することを選択した場合、ゲームでは可能であるはずです(これは、Android NDKとiPhone)。Obj-CおよびJava環境からCコードに入力イベントを渡すには、いくつかのグルーコードを作成する必要がありますが、それほど多くはありません。問題-Objective-Cを使用すると、Cコードを直接呼び出すことができ、Androidでこれを正確に実行するサンプルプロジェクトがたくさんあります。

1
wvdschel

今年の後半まで待つことができれば(正確な時間は不明)、AdobeにはAIR for AndroidとiPhone用のコンパイラが用意されています。したがって、AIRでAndroid用のアプリを作成し、ほとんど同じコードを使用してiPhoneにコンパイルできます。

http://labs.Adobe.com/technologies/flashcs5/appsfor_iphone/

待ちきれない場合でも、以下を参照してください。 http://www.insideria.com/2008/12/actionscript-to-cocoa---protot.html ActionScriptとCocoaの類似点について説明しています。 。

タッチスクリーンを使用できるAIRバージョンについては、 http://labs.Adobe.com/technologies/air2/ も確認してください。

そのため、すぐに1回記述して、ActionScript3を使用してAndroidとiPhoneにデプロイできます。

0
Todd Moses