egret随笔-publish命令的改进
缘由
导了几天的ipa,每次publish后都要改zip包名的代码,终于鼓起勇气翻看了一下egret publish的代码,唉,这代码。。。
应该不会是北京的那几个大牛写的吧???
正题
看了源码才知道为什么android版的publish会直接把代码改掉,而ios版的不会了
先来分析一下publish的Entrance吧,对于android版的代码,因为是java的代码,而android的包名就是app的标识,所以找到包名就能找到目标java文件,然后那个谁就很机智的找到了AndroidManifest.xml文件,里面正好配置有主类的包名和类名,然后顺理成章地找到java文件,然后replace掉版本号和其他东东。。。
那么,问题来了,xcode的project是没有AndroidManifest.xml的,那怎么办呢?
没办法,我试着在function run(dir, args, opts){}的三个参数里找答案,结果没找到,都没有想要的xcode project的name。
然后我想到了egretProperties.json,心里想着这里会不会配置native project name之类的东西呢,结果还是失望,只有两个path:android_path和ios_path,其实这两个是可以拿来提取nativePorjectName的,但是,如果,path很长呢,那就没办法(约定可以解决这个问题)
还是没办法,那只能从目录结构上找答案了,结果还真有,在proj.ios目录下,有两个文件夹,一个就是对应的nativePorjectName,还有一个就是nativePorjectName + “.xcodeproj”,那岂不美哉,然后我就只能用传统方法来处理了,遍历proj.ios目录,直到找到.xcodeproj结尾的文件夹,然后取其前面部分作为nativePorjectName,然后就定位到了AppDelegate.mm文件,然后replace掉版本号和其他东东。。。
约定
但是,因为egret解决方案的局限,我的解决方案是需要一个约定的,约定开发者不擅自修改那个文件夹的名字,否则就定位不到了。
随便说说
看了publish.js的代码,一开始,其实我是拒绝的,但是没办法。那代码虽然完成了功能,但是那代码效率实在不行啊,不像是大牛的手笔
if (file.exists(path.join(url, "src", javaName + ".java"))) {
javaPath = path.join(url, "src", javaName + ".java");
javaContent = file.read(javaPath);
}
else if (file.exists(path.join(url, "src", filePath, javaName + ".java"))) {
javaPath = path.join(url, "src", filePath, javaName + ".java");
javaContent = file.read(javaPath);
}
虽然v8引擎效率很高,但是egret的命令行毕竟是命令,必须要优化。
还有就是代码重用性比较弱,egret命令作为整个命令的入口,然后分派个几个自命令来执行,但是为什么不在分派前就把诸如项目名,开发平台信息,目标平台信息之类的全部准备好呢,看得我好惆怅,现在就给出了基础的命令参数而已。
建议
也不敢怎么建议egret的开发者,就建议能把命令行规范定好了再动手,期待能在下一个大版本中能统一一下命令行,支持更多参数,这样第三方工具也会脱颖而出的,想必对egret来说是一个很好促进吧!
成果
我修改了publish.js,添加了一个changeCodeEntrance.js,放弃了之前的changeJavaEntrance.js,changeCodeEntrance做了平台兼容,通过platform来识别平台,其实这个在changeJavaEntrance里已经携带了参数,但是没利用。。。定位java代码的那块没动。
如果需要就拿去用用吧,亲测可用,download url:egret-publish.rar
egret随笔-publish命令的改进的更多相关文章
- egret随笔-egret浅入浅出
•不知道有多人跟笔者一样,喜欢学各种技术,但是都不精,但也有一两项算是精的. 自从踏上了egret游戏开发的道路,就不得不学习各种技术了,因为,要精通egret,首先必须要会TypeScript,其次 ...
- 工作随笔——tar命令批量解压
由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享: 第一: for tar in *.tar.gz; do tar xvf $tar ...
- CentOS随笔——关机命令
关机重启命令 在linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况面,不得已才会关机. 正确的关机流程为:sync>shutdown>r ...
- Linux随笔---tar命令
一.解压 语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c:create:v:verbose: ...
- PuTTY 命令行改进 有效解决 中文乱码
PuTTY 是一个免费且跨平台的并支持SSH和Telnet 的客户端, 包括xterm 终端模拟器. 它由Simon Tatham 编写并维护. http://www.chiark.greenend ...
- [随笔]_ELVE_git命令复习
mkdir: XX (创建一个空目录 XX指目录名) pwd: 显示当前目录的路径. git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件. git add XX 把xx文件添 ...
- 用shell实现bat批处理的pause命令-追加改进
我参考了这个文章:用shell实现bat的pause http://linux-wiki.cn/wiki/zh-hans/%E7%94%A8shell%E5%AE%9E%E7%8E%B0bat%E7% ...
- linux命令学习 随笔
linux命令随笔 linux命令随笔 用户操作 搜索命令 PATH环境变量 Linux中的通配符 文件搜索命令locate 搜索命令的命令whereis与which 文件搜索命令find(最强大的哦 ...
- nvidia-smi命令执行很慢,如何改进
初次安装好nvidia的驱动,每次执行nvidia-smi命令时,要5秒以上. 可通过如下命令进行改进: nvidia-persistenced --persistence-mode
随机推荐
- *1022. D进制的A+B【考前最后一道题】
/* *Main.c *1022. D进制的A+B Ver.1 *Created on : 2014.9.5 *****测试通过****** */ #include <stdio.h> ...
- 解决同一PC同一浏览器session共享问题
首先session是同一PC同一浏览器共享的.比如如下代码: public void doPost(HttpServletRequest request, HttpServletResponse re ...
- js的体会
关于观察者模式的核心是: 回调函数, 传递函数名作为参数,或者是传递变量,然后调用其函数名. 关于闭包的核心是 闭包的函数是全局变量之下的函数, 而非闭包的函数是局部变量. <script> ...
- Javascript数组操作方法
1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...
- 2.5 Local Methods in High Dimensions
curse of dimensionality 输入在p维立方体中符合均匀分布,如果需要覆盖比例r的体积,需要每个维度上\(e_p(r)=r^{1/p}\) \(e_{10}(0.01)=0.63,e ...
- NSTimer你真的会用了吗
http://www.cnblogs.com/smileEvday/archive/2012/12/21/NSTimer.html
- linux服务器WEB环境一键安装包lanmp教程之五
在我们安装了linux服务器WEB环境一键安装包lanmp后,可能会有不少疑问还有就是使用过程中出现的问题,下面为大家总结几点比较常见的,如若还有其他疑问,可到wdlinux论坛寻找相关教程. 1.增 ...
- 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)
第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回 提交作业(截止时间已过) 完成并提交作业 作业批改 互评训练 互评作业 自评作业 成绩公布 查看成绩 温 ...
- Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS
由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动 ...
- MD5和SHA512Managed ——哈希算法
本文来自:http://www.cnblogs.com/chuncn/archive/2008/02/26/1082418.html C#的哈希 哈希算法是啥?哈希英文hash,是一种数学算法,它能把 ...