Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)

minixml下载地址:https://github.com/michaelrsweet/mxml/releases


先在window 7(64位)下编译测试


开发环境是vs2013 建立一个控制台项目把一下的头文件跟源文件复制进去

Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)


下面的内容是在网上找的一个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;
}


测试成功输出内容:

Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)





下面内容是生成so库:


用的 ndk进行编译   版本:android-ndk-r10d

高版本的估计也没问题,我没去做测试


config.h 头文件需要做一些小改动,保证编译so库

Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)在安卓平台这个头文件不需要导入,否则ndk会报错


Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)这些函数都是在c标准库string.h里面的     加一个平台判定即可


Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一) 标准关键字定义一下


接下来就是编写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)


编译脚本有兴趣的朋友可以百度,这里就不介绍了


最后编译的目录结构是这样子的:

Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)


最后就是用ndk编译生成so库,目录定位到

Minixml C语言轻量型xml解析库 打包成so库发布到安卓平台 (一)


定位到该目录下,打开控制台输入 ndk-build.cmd (需要先把你安装的ndk根目录配置到环境变量中)   即可生成so库