Java 跨平台iPhone/Android代码共享

Java 跨平台iPhone/Android代码共享,java,c++,iphone,objective-c,android,Java,C++,Iphone,Objective C,Android,简言之:在iPhone和Android版本之间共享/重用代码的最有效方式是什么 我认为最常见的两种情况是: Blank slate新项目,提前知道每个设备上都需要运行大量可重用逻辑 现有的iPhone代码库,C、C++和Objto-C的移植到或否则。 是的,当然,在一个完美的世界里,所有的应用程序都会插入神奇的云,所有可重用的逻辑都会出现在谷歌应用程序引擎或一些web服务中,但这不是这个问题的核心。经历了从iPhone到Android的移植,完全没有代码重用,看到人们不得不忍受的痛苦后,我想知道

简言之:在iPhone和Android版本之间共享/重用代码的最有效方式是什么

我认为最常见的两种情况是:

  • Blank slate新项目,提前知道每个设备上都需要运行大量可重用逻辑
  • 现有的iPhone代码库,C、C++和Objto-C的移植到或否则。
    是的,当然,在一个完美的世界里,所有的应用程序都会插入神奇的云,所有可重用的逻辑都会出现在谷歌应用程序引擎或一些web服务中,但这不是这个问题的核心。经历了从iPhone到Android的移植,完全没有代码重用,看到人们不得不忍受的痛苦后,我想知道其他人是如何避免的。

    我一直在用Lua和我自己的框架为iPhone创建应用程序和游戏。通过这种方式,我最终可以使用androidndk为Android实现相同的框架,但实际的应用程序代码有望在两种平台上完全相同


    我不认为有一种简单的方法可以做到这一点,因为API显然不同,本地编程语言也不同,但我的建议是用两种平台都支持的任何语言构建自己的框架。也许已经有了一个框架,可以为你做一些困难的事情?如果没有任何好的框架来实现这一点,那么这显然是一个实现自己的机会。

    < P>就像我刚才告诉过一个请求过的人,使用MVC和C++中的MC和Obj-C或java中的C++。

    < P>我可以用Android NDK编译C和C++,所以如果你使用iPhone Obj-c++(mm)iPhone中C++/C引擎的绑定,在Android中使用Java绑定到同一引擎,这应该是完全可能的


    所以C++/C引擎(Android和iPhone的代码库几乎相同)+瘦绑定层=可移植代码。

    您也可以看看。用他们的工具说,你可以用抽象的Web代码编写你的应用程序,它们将帮助你与所有的GPS、加速度传感器等网络应用程序接口。

    < P>尽可能在普通的C(或C++)中尽可能多地编写,并且只在Android和iPhone中包含相同的文件。也适用于Windows/Mac。“跨平台”图书馆往往会消耗你的精力。

    你可以尝试一下。。。编译一次到本机ARM并使用相同的二进制、标准C/C++部署到Android和iPhone,在windows或mac上开发,包括许多(可选)中间件技术。

    我用于平台抽象,我的项目结构如下所示:

    在我的电脑上:

    gamename-仅包含通用代码

    gamename android-主要包含BatteryTech的android特定代码和android配置,构建者指向gamename项目获取通用代码

    gamename-win32-仅用于构建Windows,使用gamename项目中的代码

    在我的Mac电脑上:

    gamename-仅包含通用代码

    gamename ios-iPhone/iPad版本,导入通用代码

    gamename osx-osx本机版本。导入通用代码

    我使用SVN在我的PC和Mac之间共享。我唯一真正的问题是,我在Windows中将类添加到公共代码库中,然后在mac上进行更新,将它们从SVN中拉下来。XCode无法在没有脚本的情况下自动将它们添加到项目中,因此每次我都必须手动将它们拉入,这很痛苦,但不是世界末日

    所有这些东西都配有BatteryTech,所以一旦你得到它,就很容易弄明白。

    看起来值得一试

    对于较小的项目是免费的,大型工作室也可以使用。我自己运行自制软件,但如果我没有,我可能会自己使用Moai,因为它看起来很有前途。他们声称它可以连接Mac、PC、iOS、Android,我想甚至可以连接KindleFire

    你想在Lua中编写大部分代码,但是你可以访问所有代码,这样你就可以在需要时使用C++。C++,你可以使用它来自动地将C++和java和Obj/SWIFT(其他语言)连接起来。桥接代码自动生成,直接从C++头文件中生成。以下是一份:

    用C++定义类:

    #包括
    类联系人:publicscapix::bridge::object
    {
    公众:
    std::string name();
    void send_message(const std::string&msg,std::shared_ptr from);
    void add_标记(const std::vector&tags);
    void add_friends(std::vector friends);
    };
    
    从斯威夫特那里叫它:

    class ViewController: UIViewController {
        func send(friend: Contact) {
            let c = Contact()
    
            contact.sendMessage("Hello", friend)
            contact.addTags(["a","b","c"])
            contact.addFriends([friend])
        }
    }
    
    来自Java:

    class View {
        private contact = new Contact;
    
        public void send(Contact friend) {
            contact.sendMessage("Hello", friend);
            contact.addTags({"a","b","c"});
            contact.addFriends({friend});
        }
    }
    

    如果在目标C中有一个现有的IOS代码库,可以使用基于Android应用程序中的基础和CopeFoundation的现有模型代码,然后编写一个新的UI层,通过本地NDK调用与目标C模型交互(例如在Android工作室中)。.

    +1为了提出LUA的主题,我认为人们已经忘记了,尽可能多地将逻辑放在简单的旧C中是不会出错的。这不是一个很好的主意,因为如果M+C没有Objective-C和Cocoa绑定,你最终会得到一些非常不雅和原始的东西。如果你考虑的是框架提供的MVC绑定或自动生成的代码。这些不需要使用,只需自己编写接口层即可。另外,您认为不雅和原始的标准是什么?对此也很好奇。另请参见Xcode上的+1不能自动添加新文件。我猜它不知道要将它们添加到哪个项目中,因为它的目录/文件夹/组项目结构松散。@slf:你自己用过吗,如果用过,你怎么想?我没有,这是我第一次听说它,看起来它有潜力考虑到合适的SDK构建在Android NDK上编译C,C++和目标C以及添加库来匹配iOS API的一大块。当可加载的业务已经停用时,可以使用