4

中間レベルのアプリ用に、Iphone と Android の両方に単一のコードベースを作成しようとしています。(4 つのタブ、複数のウィンドウ、マップなど) itanium 2.1 API を使用。しかし、私は、Android プラットフォームでの物事が Iphone でのテーブルビューや UI 要素のようにスムーズに、または喜んで機能しないことを発見しました。Android の UI の応答性も鈍いです。台所の流し台の例は非常に簡単です。少なくとも今後数年間は維持する必要があるエンタープライズ対応アプリを検討しています。プラットフォームの癖で同様の行に取り組み、同じコードベースから完全に機能する iOS および Android アプリの作成に成功した人はいますか?

4

2 に答える 2

4

コンパイル時のCommonJSメカニズムを使用して、OS固有の機能を持つルートビューを作成することで、多くの成功を収めています。

たとえば、OSに依存しないビューはui/MyView.jsのようになります。

var createAddButton = require("ui/MyView.AddButton");

var MyView = function() {
    var self = Ti.UI.createWindow();
    createAddButton(self, function() { alert('ADD!'); });
    return self;
};

module.exports = MyView;

次に、それを処理するOS固有の関数を作成します。

iphone / ui / MyView.AddButton.js

module.exports = function(view, addHandler) {
    var addButton = Titanium.UI.createButton({
        systemButton: Titanium.UI.iPhone.SystemButton.ADD
    });

    addButton.addEventListener("click", addHandler);

    view.rightNavButton = addButton;
};

android / ui / MyView.AddButton.js

module.exports = function(view, addHandler) {
    view.activity.onCreateOptionsMenu = function(e){
        var menuItem = e.menu.add({ title: "Add" });
        menuItem.addEventListener("click", addHandler);
    }; 
};

彼らが実装したCommonJSシステムは、ボタンが適切な場所に追加されるように、MyView.AddButton.jsの適切なバージョンを選択します。これにより、ビューの大部分を同じにすることができますが、OS固有のものを適切に分離することができます。

于 2012-09-24T17:22:37.713 に答える
3

Titanium は、1 つのコードベースをすべての人に提供することを意図したものではありません。OSごとに書き直す必要があります。ただし、一部のアプリ開発者は、コードの 95% を再利用したと主張しています。したがって、コードの 5% のみが OS 固有です。しかし、彼らのコードは if-else でいっぱいだと確信しています。

何千ものif-else構造を使わずに適切に維持できるようにするために、私が推奨することは、単一のバックエンドコアを構築し、OSごとにUI関連の問題に特化したコードを書くことです. このようにして、Android 用の UI 関連のコード、iOS 用の UI 関連のコード、および両方で動作する 1 つのコアが得られます。

Android と iOS は大きく異なるため、単一のコードベースを作成すると、OS 固有の機能 (Android ハードウェア メニュー ボタンや iOS NavigationGroup など) を使用できなくなり、UI が直感的ではなくなります。

于 2012-09-24T13:51:26.790 に答える