Android调用mongoose实现Web服务器

新建一个jni的文件夹,放入http_client.c mongoose.c mongoose.h Android.mk文件,Android.mk文件内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE

LOCAL_MODULE    := mongoose
LOCAL_SRC_FILES := http_client.c mongoose.c

include $(BUILD_EXECUTABLE) #可执行文件
  • cd到该目录,执行ndk-build,会生成libs和obj两个文件夹,libs/armeabi/下会有可执行文件mongoose,将该文件push到手机的/data/local。
  • adb shell进入手机的/data/local目录,执行./mongoose即可。
  • 手机端访问127.0.0.1:8080即可访问到该网页

在Android 5.0及以后版本,若没有添加

LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE

会出现如下错误:

error: only position independent executables (PIE) are supported.

这是因为,PIE这个安全机制从4.1引入,Android 5.0之前的系统版本并不会去检验可执行文件是否基于PIE编译出的,因此不会报错。但是Android 5.0以后已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。解决办法非常简单,在Android.mk中加入上面两个FLAG即可。

java中调用mongoose的方法
1. Executing mongoose from the Java application using Runtime.getRuntime().exec call
2. Building a shared library and calling its functions using JNI.

你可能感兴趣的:(android,web服务器)