您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-13 18:12 411 查看
minixml下载地址:https://github.com/michaelrsweet/mxml/releases

先在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库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息