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库
先在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库
相关文章推荐
- 移动社交游戏平台OpenFeint在安卓和iOS平台发布游戏消息推送系统GameFeed
- Qt5.0.2 + MinGw4.7 编译出来的程序,在windows平台下的发布与打包程序
- Qt4程序在windows平台下打包发布
- win7平台下QT软件的打包与发布(部署与安装) 打包成安装包样式
- win7平台下QT软件的打包与发布(部署与安装)
- Jenkins下Android自动化打包(图文讲解)(自动发布内测平台)
- ionic安卓打包发布Release
- Android(安卓)开发中可能用到的应用发布平台
- 使用UE4发布安卓平台游戏
- [置顶] Tiger LeapV1.0打包发布,里面包含了mmsplayer,wzplayer,tlplayer各个平台的播放器用例.包括部分source code
- Unity打包安卓apk时或发布安卓程序时提示 Android Asset Packaging Tool Failed
- Qt程序各个平台打包发布及安装程序大全
- Tiger LeapV1.0打包发布,里面包含了mmsplayer,wzplayer,tlplayer各个平台的播放器用例.包括部分source code
- Unity3D安卓平台发布配置
- windows平台QT程序发布打包
- ReactNative 安卓打包发布
- Unity发布安卓平台——截屏保存到安卓目录方法
- Windows 平台下 Qt应用程序打包发布
- Tiger LeapV1.0打包发布,里面包含了mmsplayer,wzplayer,tlplayer各个平台的播放器用例.包括部分source code
- Windows平台下QT程序打包发布