缘由

  导了几天的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. Leetcode 226 Invert Binary Tree python

    题目: Invert a binary tree. 翻转二叉树. 递归,每次对节点的左右节点调用invertTree函数,直到叶节点. python中也没有swap函数,当然你可以写一个,不过pyth ...

  2. BCB的博客,以及例子(好多传输文件的例子)

    http://blog.csdn.net/keyu1711/ http://download.csdn.net/user/keyu1711 http://download.csdn.net/user/ ...

  3. Windows服务安装完成后自动启动

    public ServiceInstaller() { //... Installer code here this.AfterInstall += new InstallEventHandler(S ...

  4. TCP和HTTP

    TCP和HTTP 2013-11-01 11:29 6564人阅读 评论(2) 收藏 举报 分类: 计算机—杂七杂八(15) 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议, ...

  5. stl_map,set 用法

    set: 集合a,b加起来,去重 hdu 1406 #include <iostream> #include<cstdio> #include<set> using ...

  6. UVA - 11882 Biggest Number(dfs+bfs+强剪枝)

    题目大意:给出一个方格矩阵,矩阵中有数字0~9,任选一个格子为起点,将走过的数字连起来构成一个数,找出最大的那个数,每个格子只能走一次. 题目分析:DFS.剪枝方案:在当前的处境下,找出所有还能到达的 ...

  7. 后缀数组da3模板

    在做poj2406的时候...按论文给的rmq模板会超内存...然后网上找了http://blog.csdn.net/libin56842/article/details/46310425这位大爷的d ...

  8. SQL SERVER分区视图

    借助SQL SERVER分区视图,可以对SQL中的表进行集中管理,下文将以实例的方式为您详解SQL SERVER分区视图,希望对您学习SQL数据库能有所帮助. SQL SERVER分区视图给我们提供了 ...

  9. 求链表的倒数第k个节点

    问题描述:给定一个链表的头节点,求出链表的倒数第k个节点. 分析:这是链表里的经典问题,存在多种解法,下面给大家分享下我的想法. 解法一:很直观的一种做法是从头到尾扫描链表,然后求倒数第k个,但是由于 ...

  10. Activity(二)

    多个Activity之间的调用 建立一个Activity 配置layout文件夹下fragment_main.xml文件 在layout下新建other.xml文件 xml文件创建的id需要编译才能生 ...