2014年3月

android下的zeromq包有两个,纯java的JeroMQ和jni方式的jzmq.我自己选择了jzmq,然后libzmq使用stable的3.x.

下载zeromq,

git clone https://github.com/zeromq/zeromq3-x.git

编译:

OUTPUT_DIR=/tmp/zeromq-android
./autogen.sh
./configure  --disable-shared --host=arm-linux-androideabi --enable-static  LIBS="-lgcc"  CPPFLAGS="-fPIC -I /tmp/ndk/arm-linux-androideabi/include/c++/4.6/ -I /tmp/ndk/arm-linux-androideabi/include/c++/4.6/arm-linux-androideabi -L  /tmp/ndk/arm-linux-androideabi/lib" --prefix=/tmp/zeromq-android/
make
make install

然后是jzmq:

git clone https://github.com/zeromq/jzmq.git
./autogen.sh
./configure --host=arm-linux-androideabi --prefix=$OUTPUT_DIR --with-zeromq=$OUTPUT_DIR CPPFLAGS="-fPIC -I$OUTPUT_DIR/include" LDFLAGS="-L$OUTPUT_DIR/lib" --disable-version LIBS="-lpthread -lrt"
make
make install

如果编译有问题,去除LIBS="-lpthread -lrt"
最后在/tmp/zeromq-android目录得到: libjzmq.so,libzmq.a,zmq.jar, 用strip压缩libjzmq.so, 就可以放到libs下使用了。

由于要在android中用zeromq进行网络通信,所以自己新建了一个新android app, 然后编译好libjzmq.sojzmq.jar, 并加入项目。 然后测试代码完成以后发现怎么都连接不通,调试再三,甚至怀疑库文件编译错误。

后来,仔细检查连接ip也不是127.0.0.1, tcpdump在服务端和客户端也没有发现任何连接。灵光一闪,会不会是权限问题,突然领悟没有加上android.permission.INTERNET 网络访问的权限,这个在jni中的socket连接由于权限不能连接也没有任何错误。。 好久没碰过android的代码,各种弱智错误都开始出现了。