页面导航:
项目下载地址:
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标准库里,实现上面显示的
printf到
va_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~~