开发一个共享的Android/iOS网络库

8

我一直在开发iOS应用程序,但现在,我正在为iOS和Android开发应用程序。尽可能地,我正在尝试编写尽可能平台无关的代码。

人们通常是如何处理网络功能的呢?我似乎找不到任何有关在Android中进行GET/POST HTTP请求的资源。

您会如何解决开发适用于iOS和Android的共享网络库的问题。

编辑:我将在C/C++中完成所有Android网络编程而不是Java!

是否有针对Android的C/C++网络库(因此可以用于iOS)?


嗯,不太清楚你想要实现什么,我只是想问一下:你是否知道已经有几个尝试完成这个任务的跨平台框架了,比如让你用html+js编写应用程序,然后将它们构建成一个定制的应用程序,为每个平台提供一个? - Thomas Tempelmann
相关问题:http://stackoverflow.com/questions/3045477/android-iphone-single-codebase-cross-development - Guido
6个回答

9
我不认为这个问题像大多数人在这里所说的那样不可能。我最近采访了一位曾在一家大型移动游戏开发公司工作的人,他提到他们尽可能地在C/C++库中完成所有工作,以便在多个平台上重用代码,包括Android和iOS。虽然我自己没有尝试过,但我听到过很多次这种做法。
例如,可以查看此博客文章:http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html
如果cURL库可以在Android上使用,我不明白为什么您的网络库不能。困难很可能与与GUI交互有关,因为您无法从C/C++代码库中访问平台SDK。但对于网络库来说,这是完全可以的。以下是我的建议:
  1. 编写一些概念验证代码,以查看如何链接两个平台的库。考虑您的库设计中的限制。
  2. 采用测试驱动的开发方法,将您的网络库作为独立项目进行开发。也就是说,在开发过程中编写单元测试来测试您的代码。
  3. 在Android和iOS项目中编写本机代码的包装器类,以隔离库代码。
此外,正如先前提到的那样,只要使用XCode开发,苹果公司允许使用C/C++开发应用程序。他们甚至在去年放宽了这个要求。
祝你好运!

1

我猜你正在谈论本地(非基于Web的)应用程序。要在Android中进行GET/POST HTTP请求,您应该看一下HTTPClient。这个Java库随Android一起提供,它可以开发您需要的功能:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
try {
    HttpResponse response = client.execute(request);
    ...
} catch(Exception ex) {
    // handle
}

关于如何为iOS和Android开发共享网络库,这是一个有趣的问题。我无法想出任何解决方案,因为这些平台之间存在太多差异(最明显的是Java与Objective C),但这将是非常好的。
我可以说,Android通过NDK支持C/C++代码,但我不确定它是否适用于iOS。

如果我用C/C++开发所有的网络代码会怎样?iOS和Android支持吗? - Mark
是的,我认为是这样,但我确定你会遇到很多问题(不要问我为什么)。在Android上通过NDK,在iOS上我不确定如何将你的C/C++交叉编译到iPhone ARM,因为我从未尝试过。 - Guido

1
考虑到差异,这并不是真正可能的。编写Blackberry/Android共享库非常麻烦,它们都使用“Java”。
如果您真的想要跨平台,则需要使用JavaScript编写网页,然后在设备上通过Web视图交付它们。
您无法真正在Objective C和Java之间共享代码,据我所知,这是不可能的,您无法在iPhone上运行Java,也无法在Android上运行ObjectiveC。因此,没有可能以本地代码的方式进行此操作。
编辑:就网络而言,在许多地方,您无法以统一的方式访问跨平台的低级网络。

刚刚编辑了我的问题。我将在我的Android应用中使用C/C++。 - Mark
虽然这样简化了事情,但仍然感觉像是一种疯狂的练习。维护两个库,一个用于Android,另一个用于iPhone,很可能比尝试将它们合并要少工作,因为它们的API和编码风格非常不同。如果该库面向公众消费,则Android C++是一件罕见的事情,它的文档或公共性远不及Java端。 - HaMMeReD

1

正如其他人所说,这并不容易,如果可能的话。如果您决定尝试一下,我建议使用C/C++进行开发,因为两个平台都可以处理该语言。(iOS是Objective-C,而Android可以通过NDK处理C。)不要费心尝试在iOS上运行Java...


刚刚编辑了我的问题。我将在我的Android应用程序中使用C/C++。 - Mark
不管怎样,我认为它不会起作用,你知道苹果对API访问等方面的限制有多严格。祝你好运! - Moshe
@Moshe - Apple对iOS应用程序中的C、C++和Objective-C编译代码完全没有问题。毕竟,Obj-C只是C语言的超集。 - Mark
@mark - 是的,但他们可能会在访问网络硬件方面遇到问题。如果您成功了,请告诉我,我很想能够从基于iPad的展示应用向本地Android手机发送信息... - Moshe

1

你可以尝试使用Titanium,它的源代码是JS,然后可以交叉编译到iOS或Android。


-1

如果你能忍受这种可怕的语言,就使用Javascript吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接