zengl v1.5.0 , 添加了一个zenglOX目录,该目录内的makefile和相关的源文件都是针对zenglOX操作系统的(可以参考zenglOX v2.3.0的官方文章),需要在zenglOX的源代码中进行编译,其他的windows目录、android目录内的zengl_exportfuns.h及zengl_global.h头文件也进行了同步,这样就可以和linux目录内的源代码保持一致...

    页面导航:
项目下载地址:

    v1.5.0源代码的相关下载地址,如下所示:

    github.com项目地址:https://github.com/zenglong/zengl_language/

    百度盘的下载地址:http://pan.baidu.com/s/1eQirmBg (zip压缩包里包含的zengl_language_v1.5.0.apk文件为v1.5.0版本的Android安装包)

    sourceforge的地址:http://sourceforge.net/projects/zengl/files/ (包含所有历史版本)

    如果使用Chrome浏览器下载时提示“不是常见的下载类型....”之类的,请选择保留(如果选择默认的放弃选项,则浏览器不会完成下载),因为zip压缩包里包含apk安装包,因此就有可能会弹出这样的提示。

readme说明文档:

    zengl v1.5.0版本的描述信息如下(该信息可以在github.com上查看到,也可以在v1.5.0的readme文件里查看到):

zengl v1.5.0 , 添加了一个zenglOX目录,该目录内的makefile和相关的源文件都是针对zenglOX操作系统的(可以参考zenglOX v2.3.0的官方文章),需要在zenglOX的源代码中进行编译,其他的windows目录、android目录内的zengl_exportfuns.h及zengl_global.h头文件也进行了同步,这样就可以和linux目录内的源代码保持一致。

源码简析:

    在"zenglOX v2.3.0 移植zengl嵌入式脚本语言"的文章里,作者已经对zenglOX目录内的makefile文件以及zengl_global.h之类的被修改过的源码做了详细的解释,因此这里就不再过多的介绍这些文件的内容了。

    其实当前版本所做的改动很少,zengl_global.h头文件里只是对其包含的头文件做了些调整(zenglOX系统只需包含stdlib.h即可),zengl_exportfuns.h头文件里则只修改了一下版本号而已,至于zenglOX目录内的longjmp.s及setjmp.s是两个汇编程式,它们定义了长跳转相关的函数(这两个函数的源代码来源自网络),这些信息都在zenglOX v2.3.0的文章里介绍过了。

    要对zengl脚本语言进行移植,其实并不难,因为它的代码里,所依赖的外部函数都是些标准的C库函数,并且你可以在zengl_global.h头文件里查看到zengl所依赖的所有的C库函数:

/*
 * global.h
 *
 *  Created on: 2012-1-22
 *      Author: zenglong
 */

...................................................
#define ZENGL_SYS_PRINTF printf //打印语句的宏定义,可以使用printf,也可以用自定义的函数,比如输出到日志文件的函数等。
#define ZENGL_SYS_VPRINTF vprintf //可以通过函数的arglist来打印可选参数列表的函数
#define ZENGL_SYS_FILE_OPEN fopen //打开文件函数
#define ZENGL_SYS_FILE_GETS fgets //读取文件内容到缓存中的函数
#define ZENGL_SYS_FILE_READ fread //读取文件内容到缓存中,主要用于读取二进制文件
#define ZENGL_SYS_FILE_EOF feof //读取文件内容到缓存中的函数
#define ZENGL_SYS_FILE_CLOSE fclose //关闭文件句柄
#define ZENGL_SYS_MEM_ALLOC malloc //内存分配函数
#define ZENGL_SYS_MEM_RE_ALLOC realloc //内存重新调整大小的函数
#define ZENGL_SYS_MEM_SET memset //设置连续内存中的值
#define ZENGL_SYS_MEM_COPY memcpy //连续内存拷贝函数
#define ZENGL_SYS_MEM_FREE free //释放内存资源
#define ZENGL_SYS_CTYPE_IS_ALPHA isalpha //ctype.h中声明的标准库函数,判断字符是否为英文字母
#define ZENGL_SYS_CTYPE_IS_DIGIT isdigit //ctype.h中声明的标准库函数,判断字符是否为数字
#define ZENGL_SYS_CTYPE_IS_HEXDIGIT isxdigit //ctype.h中声明的标准库函数,判断字符是否为十六进制数
#define ZENGL_SYS_CTYPE_IS_ALNUM isalnum //ctype.h中声明的标准库函数,判断字符是否为字母或数字
#define ZENGL_SYS_SPRINTF sprintf //将字符串格式化输出到缓存中
#ifdef ZL_LANG_IN_VC6
	#define ZENGL_SYS_SPRINTF_ARG_NUM _vsnprintf //使用va_list和限制了字符数的格式化输出函数,另外VC6编译器下的vsnprintf需要在前面加下划线!
#else
	#define ZENGL_SYS_SPRINTF_ARG_NUM vsnprintf //使用va_list和限制了字符数的格式化输出函数
#endif
#define ZENGL_SYS_STRLEN strlen //得到字符串长度信息
#define ZENGL_SYS_STRCMP strcmp //字符串比较函数
#define ZENGL_SYS_STRNCMP strncmp //字符串比较函数
#define ZENGL_SYS_STRNCPY strncpy //字符串拷贝函数
#define ZENGL_SYS_STRCHR strchr //在字符串中查找某字符
#define ZENGL_SYS_STR_TO_NUM atoi //将字符串转为整数
#define ZENGL_SYS_STR_TO_LONG_NUM atol //将字符串转为长整数
#define ZENGL_SYS_STR_TO_FLOAT atof //将字符串转为浮点数
#define ZENGL_SYS_TIME_CLOCK clock //获取CPU执行的tick滴答值,用于统计执行时间
#define ZENGL_SYS_JMP_LONGJMP_TO longjmp //长跳转,用于出错时跳转
#define ZENGL_SYS_JMP_SETJMP setjmp //设置长跳转的地址
#define ZENGL_SYS_ARG_LIST va_list //可变参数列表
#define ZENGL_SYS_ARG_START va_start //可变参数起始地址
#define ZENGL_SYS_ARG_GET  va_arg  //获取可变参数值
#define ZENGL_SYS_ARG_END va_end //结束可变参数列表定义
/*宏定义结束*/
...................................................


    因此,在zenglOX里移植zengl脚本语言时,所需要做的仅仅是在libc.so的C标准库里,实现上面显示的printfva_end的库函数即可。

android项目的导入及运行调试:

    在之前"v1.3.1 Android编译执行zengl脚本"的文章里,介绍了android项目的环境搭建及相关注意事项,但是并没有介绍如何导入源代码里android目录内的项目,下面就对导入过程及相关注意事项进行介绍。

    注意,这里我假定你已经安装好了SDK,NDK,cygwin(cygwin需要设置环境变量PATH,让其包含cygwin的bin目录),CDT插件(建议使用官方adt一键安装包,默认已经装好了SDK和CDT插件),并且经过了ndk下示例代码helloJni的测试(请参考v1.3.1版本的文章以及参考 http://bbs.zengl.com/thread-27-1-1.html 帖子里的信息),然后才可以进入下面的步骤。

    在导入新版本的android项目之前,应先确保Package Explorer(包资源管理器)里不存在RunScript项目,如果存在,则先删除掉它(eclipse的同一个workspace里不允许同时存在两个相同的项目),可以对项目点击右键,在弹出菜单里有删除选项:


图1

    接着就可以在File菜单下的New子菜单中的Project里导入项目:
 

图2

    点击了Project后,会弹出一个New Project的对话框,在该对话框内选择Android Project from Existing Code :
 

图3

    然后点击上面图3里New Project对话框最下方的Next按钮,此时就会进入下面的Import Projects对话框,在该对话框内,通过Browse...按钮选择zengl v1.5.0源代码的android目录的路径:
 

图4

    导入项目后如果遇到中文乱码引起的语法错误,则说明你的workspace使用的是默认的GBK的编码,需要调整为UTF-8编码(android目录内的代码都是用的UTF-8编码),可以在Window菜单的Preferences中进行设置:
 

图5

    点击上图菜单里的Preferences后,在弹出的Preferences对话框中的General -> Workspace下就可以设置编码了:
 

图6

    此外,如果之前,workspace里没有设置过NDK路径信息的话,也可以在上图所示的Preferences对话框中进行设置,如下所示:
 

图7

    接着就可以按照"v1.3.1 Android编译执行zengl脚本"文章里的说明,将工程里的Android Dependencies(如果存在这项的话)给移除掉:
 

图8

    接着加入Android Native Support (在RunScript工程右键中):
 

图9

    弹出的对话框中Library Name保持默认的RunScript不变:
 

图10

    然后eclipse就会切换到C/C++视图,该视图下,在RunScript工程属性的C/C++ Build中设置build command:
 

图11

    设置NDK_DEBUG=1 ,加入ndk调试参数。

    在进行下面的调试之前,如果你使用的是真机进行的调试,请先将原来安装的RunScript程式给卸载掉(主要是打包签名过的发布版的程式,如果是调试版的程式则无所谓,下面会介绍如何生成打包签名的发布版的apk安装包)。

    接着就可以在RunScript工程右键中的Debug As中选择Android Application ,先让程序安装运行到真机或模拟器中,要调试C源码时,再选择Debug As中的Android Native Application 进行本地C源码调试 (选择Android Native Application之前最好都执行一下Android Application,可以避免一些不必要的错误)。
 
图12

    下面是当前版本app运行的情况:
 

图13

android项目导出签名的apk包:

    在sourceforge及百度盘下载下来的zip压缩包内,有一个zengl_language_v1.5.0.apk的android安装包,该文件就是签名过的发布版的android安装程式。

    下面就介绍下,如何导出签名的安装包,如果读者已经知道的话,可以跳过。

    在经过之前的运行调试后,可以通过RunScript右键选择Android Tools里的Export Signed Application Package...来导出签名的应用程式包:


图14

    在弹出的Export Android Application中,Project输入框内保持默认的RunScript工程:
 

图15

    点击上图里的Next按钮,会出现keystore selection对话框内:
 

图16

    在该对话框内,你可以选择已存在的keystore(签名用的文件),也可以创建一个keystore:
 

图17

    上面点击Next后,会出现Key Creation对话框,在该对话框内,需要输入Alias(别名)及对应的password密码信息:
 

图18

    点击Next按钮,在弹出的Destination and key/certificate checks对话框内输入目标apk文件的路径即可:
 

图19

    点击上图底部的Finish按钮即可创建完成,这样创建的zengl.apk文件就是发布版的签名过的android安装程式了,可以传到真机上进行安装。

    以上就是当前版本的相关内容。

    OK,就到这里,休息,休息一下 o(∩_∩)o~~
 
上下篇

下一篇: zengl v1.6.0-v1.7.1, zenglServer v0.1.0

上一篇: zengl v1.4.1 及zengl_SDL新增的Android工程

相关文章

zengl编程语言v0.0.5构建符号表汇编代码和虚拟机

zengl v1.2.0 嵌入式编程语言

zengl编程语言v0.0.13函数中实现global和return

zengl编程语言v0.0.22实现switch...case

zengl编程语言v0.0.12函数的实现

zengl编程语言 v1.0.2 修复BUG