我在Android上相当新,我对所有专家都有一些疑问! 好的,我的问题...... 我实现了基于套接字编程的客户端 - 服务器应用程序。服务器对一些数据包进行编码,通过套接字将它们发送到客户端,然后clinet对它们进行解码。 我用两台linux机器测试了代码并且工作正常,但在我的实验中需要包含另一个节点(这将是Android)。因此服务器(linux机器)将对数据包进行编码并通过套接字发送到client1(linux机器)和client2(Android)。 出于这个原因,我想将我的代码的原生二进制文件(在C ++中)移植到Android。 我可以这样做?
请给我一些帮助! 真的我完全被困了!
谢谢,
任豆
答案 0 :(得分:1)
当你想将本机代码C / C ++移植到android时你想查找android ndk和jni
http://developer.android.com/sdk/ndk/index.html
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
在ndk中有一些关于如何做到这一点的例子。
警告C完全受支持但是C ++支持apis在android上非常有限(列表在ndk的文档中),因此您可能在移植代码时遇到问题。
如果可以的话,我建议直接使用java,因为使用JNI是单调乏味的lol
答案 1 :(得分:0)
你怎么能移植这个?开始学习android我做了一个快速检查注意到它的sdk使用java你可以从查看开始
答案 2 :(得分:0)
感谢您的回复,
我首先尝试使用套接字在java中完全编写我自己的代码,但是我必须将一些优化的库移植到Android上,我可以弄清楚如何做到这一点(我可以移植一个简单的小库而不是我的那个通缉)。我放弃了,我现在正试着玩jni和ndk。但是我不知道我是否确实可以移植我的二进制文件,因为它是非静态的(如hello world)。这就是我要问的原因。如果有其他人有一些经验,请告诉我。非常感谢,
任豆
答案 3 :(得分:0)
您应该做的是安装SDK和NDK并构建hello-jni ndk示例。
然后查找如何从C访问android logcat输出,并为自己编写一个很好的类似printf的小包装(可能使用底层函数的vargs版本),这样您就可以轻松地从本机代码生成调试输出
然后将您的本机可执行文件移植到hello-jni示例代码中,这样您就拥有了一个java包装器,除了通过调用本机代码启动之外,它只做很少的事情。请记住,不要在UI线程或在该线程下调用的本机代码中进行太多处理,否则您将面临应用程序未响应超时的风险。
也可以(ab)使用ndk的gcc来生成没有java包装器的独立本机可执行文件,但不鼓励这样做。很难找到一个可靠的地方在非根电话上安装它们,并且android的进程管理对未知的本机进程不满意。换句话说,这是一条适用于您自己设备上的个人实验的路径,但对于部署到其他设备的应用程序而言,这是一个困难且非面向未来的路径。