缘由

  导了几天的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命令的改进的更多相关文章

  1. egret随笔-egret浅入浅出

    •不知道有多人跟笔者一样,喜欢学各种技术,但是都不精,但也有一两项算是精的. 自从踏上了egret游戏开发的道路,就不得不学习各种技术了,因为,要精通egret,首先必须要会TypeScript,其次 ...

  2. 工作随笔——tar命令批量解压

    由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享: 第一: for tar in *.tar.gz; do tar xvf $tar ...

  3. CentOS随笔——关机命令

    关机重启命令 在linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况面,不得已才会关机. 正确的关机流程为:sync>shutdown>r ...

  4. Linux随笔---tar命令

    一.解压 语法:tar  [主选项+辅选项]  文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c:create:v:verbose: ...

  5. PuTTY 命令行改进 有效解决 中文乱码

    PuTTY  是一个免费且跨平台的并支持SSH和Telnet 的客户端, 包括xterm 终端模拟器. 它由Simon Tatham 编写并维护. http://www.chiark.greenend ...

  6. [随笔]_ELVE_git命令复习

    mkdir: XX (创建一个空目录 XX指目录名) pwd: 显示当前目录的路径. git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件. git add XX 把xx文件添 ...

  7. 用shell实现bat批处理的pause命令-追加改进

    我参考了这个文章:用shell实现bat的pause http://linux-wiki.cn/wiki/zh-hans/%E7%94%A8shell%E5%AE%9E%E7%8E%B0bat%E7% ...

  8. linux命令学习 随笔

    linux命令随笔 linux命令随笔 用户操作 搜索命令 PATH环境变量 Linux中的通配符 文件搜索命令locate 搜索命令的命令whereis与which 文件搜索命令find(最强大的哦 ...

  9. nvidia-smi命令执行很慢,如何改进

    初次安装好nvidia的驱动,每次执行nvidia-smi命令时,要5秒以上. 可通过如下命令进行改进: nvidia-persistenced --persistence-mode

随机推荐

  1. xml文件的解析

    1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...

  2. Javascript自定义类

    JavaScript并不是严格的面向对象的语言,但是带有面向对象的一些特性,我们可以通过这些特性创建js中的自定义类. JavaScript中的类其实是function关键字包裹的一系列变量和方法. ...

  3. Number Steps

    Number Steps Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. Ajax日记

    简要讲Ajax 的内容归纳为博客. AJAX能且仅能从服务器上读取文件,我们使用ajax的时候分为以下几个步骤: 1.  创建ajax对象 2.  链接服务器 3.  发送请求 4.  接收返回值 下 ...

  5. Sysstat性能监控工具包中20个实用命令

    Sysstat性能监控工具包中20个实用命令 学习mpstat, pidstat, iostat和sar等工具,这些工具可以帮组我们找出系统中的问题.这些工具都包含了不同的选项,这意味着你可以根据不同 ...

  6. Ubuntu 12.04安装NFS server

    首先安装nfs-kernel-server apt-get install nfs-kernel-server 然后创建一个目录: mkdir -p /opt/share 并赋予权限777: chmo ...

  7. json概述及python处理json等数据类型

    <一,概念> 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化(deserialization): ...

  8. 区间dp-hdu-4745-Two Rabbits

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4745 题目意思: 给n个环状的数,A.B两人沿相反的方向走,每单位时间走一步,要求相同时间两人到达相 ...

  9. Hadoop 3、Hadoop 分布式存储系统 HDFS

    HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 一.HDFS的优缺点 1.HDFS优点: a.高容错性 .数据保存多个副本 .数 ...

  10. hdu 5606 tree(并查集)

    Problem Description There is a tree(the tree is a connected graph which contains n points and n−1 ed ...