Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)
先在window 7(64位)下编译测试
开发环境是vs2013 建立一个控制台项目把一下的头文件跟源文件复制进去
下面的内容是在网上找的一个xml文件内容,做测试用的:
<?xml version="1.0" encoding="gb2312" ?>
<note year="55" date="33" month="22">
<id>5000</id>
<password>FE-D0-18-00</password>
</note>
以下是测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mxml.h"
int main(int arg,char* args[]){
FILE* fp;
mxml_node_t* tree,*node;
fp = fopen("D:/vs2013_project/minxml_test_pro/minxml_test_pro/test.xml","r");
tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK);
fclose(fp);
node = mxmlFindElement(tree, tree, "note", NULL, NULL, MXML_DESCEND);
printf("year:%s \n",mxmlElementGetAttr(node,"year"));
printf("month:%s \n", mxmlElementGetAttr(node, "month"));
printf("date:%s \n", mxmlElementGetAttr(node, "date"));
mxml_node_t* id, *password;
id = mxmlFindElement(node, tree, "id",NULL, NULL, MXML_DESCEND);
printf("id string is:%s \n",id->child->value.text.string);
password = mxmlFindElement(node,tree,"password",NULL,NULL,MXML_DESCEND);
printf("password string is:%s \n",password->child->value.text.string);
return 0;
}
测试成功输出内容:
下面内容是生成so库:
用的 ndk进行编译 版本:android-ndk-r10d
高版本的估计也没问题,我没去做测试
config.h 头文件需要做一些小改动,保证编译so库
在安卓平台这个头文件不需要导入,否则ndk会报错
这些函数都是在c标准库string.h里面的 加一个平台判定即可
标准关键字定义一下
接下来就是编写mk文件了,可以在ndk复制一个项目出来修改,在ndk的根目录有一个叫sample的文件夹,里面有需要项目。选择一个相近的复制使用即可
Application.mk文件
APP_ABI := all
Android.mk文件的内容如下:
# A simple test for the minimal standard C++ library
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := jni
LOCAL_MODULE := minixml_module
LOCAL_SRC_FILES := good.c \
mmd.c \
mxml-attr.c \
mxmldoc.c \
mxml-entity.c \
mxml-file.c \
mxml-get.c \
mxml-index.c \
mxml-node.c \
mxml-private.c \
mxml-search.c \
mxml-set.c \
mxml-string.c
include $(BUILD_SHARED_LIBRARY)
编译脚本有兴趣的朋友可以百度,这里就不介绍了
最后编译的目录结构是这样子的:
最后就是用ndk编译生成so库,目录定位到
定位到该目录下,打开控制台输入 ndk-build.cmd (需要先把你安装的ndk根目录配置到环境变量中) 即可生成so库