MTK的独特的开发方式,大大缩短了开发的周期。
以至于到了后期,手机开发变成了一个拼价格,拼速度的过程。
在一些小公司,有些开发周期短短的不到一星期,而且既要面对客户无休止的修改,甚至可能一个人会负责三个以上的项目。
如何提高个人工作效率,成为许多开发者难以回避的问题。
一个好的想法,就是尽量把电脑能做的工作让电脑做,电脑搞不定的工作再由人来实现。
这让我们想起DOS早期的批处理,不错,这些脚本成了很不错的选择,可以大大减轻我们的工作量。
介绍几个我常常使用的脚本:
1.删除SVN版本文件,使用SVN管理版本的公司,有时会遇到这个问题,当然你搜索SVN,然后把找到的全部删掉,也是可以的,但有了太多的人的活动,这个工作可以由电脑自己完成。下面是我使用脚本:
for /r . %%a in (.) do @if exist "%%a/.svn" rd /s /q "%%a/.svn" | @echo %%a
这是个很简单的使用FOR实现循环删除文件夹并显示删除内容的脚本,因为RD不支持连续删除,但有了FOR就可以实现这一效果了。
2.如果使用CVS管理,改一下就可以了。
for /r . %%a in (.) do @if exist "%%a/.cvs" rd /s /q "%%a/.cvs" | @echo %%a
3.我们的代码全SVN管理,我可以使用下面的脚本,使电脑自己实现从SVN库中下载代码,编绎程序,如果你要使用,大概需要针对你自己的项目做一些修改。
title fzd_x760b_01
svn export http://mtksoftver/6225_06B/Branch/X760B/Version/FZD_X760B_03/1.0T01
ipmsg /msg jiazhiguo svnfinished
@for /d %%x in (*) do cd %%x/main
call copyfile FZD_X760B_01
ipmsg /msg jiazhiguo copyfinished
call make x225b gprs new
ipmsg /msg jiazhiguo make finished
该文件修改CMD窗口标题,接着执行SVN EXPORT命令从SVN下载文件,下载完成后,我使用飞鸽给自己发消息说明下载完毕,然后MAIN文件夹执行拷贝私有文件,接着编绎该项目。编绎完后我就可以去查看编绎结果,发版本。
4.有时我们会为输入常常的编绎指令而痛苦,影响了时间,这时我会使用下面的批处理,把该批处理放到MAIN文件夹下,起名为NEWMAKE,到该目录下,直接双击该文件,就可以NEW我们的项目了,唯一需要解释的是,你要保证你的MAKE文件夹下只有一个项目。
cd make
if exist *gprs.mak goto gprs
if exist *gsm.mak goto gsm
echo 找不到可用的MAKE文件
goto end
:gprs
for %%x in (Verno*.bld) do set a=%%x
cd ../
make %a:~6,-4% gprs new
goto end
:gsm
for %%x in (Verno*.bld) do if set a=%%x
cd ../
make %a:~6,-4% gms new
:end
该批处理会分析我们的make文件和VERNO文件,确定项目的类型和项目名称,自己启动NEW指令。
5.如果既想编程序,又想编模拟器,就可以使用下面的批处理。
call make LCSH23C_07B GPRS new
call make LCSH23C_07B GPRS gen_modis
call make LCSH23C_07B GPRS codegen_modis
call make -debug LCSH23C_07B GPRS new_modis
这个脚本太简单了,以至于不需要做过多说明,可能有人会奇怪,为什么使用CALL,不使用似乎也不会错,不使用有时候是会有错的,CALL是批处理调用子批处理的关键字。有了他可以保证在调用过程中一直在最初建立的那个命令行窗口。
6有些公司安装了分布式编绎器,这可是个好玩意,可以极大的提高编绎速度,特别是在公司电脑配置不太好的情况下,这无疑可以节省很多加班时间。但这一执行过程也可以使用批处理来完成,下面就是调用分布式编绎模拟器的批处理。
call m lc6225_gemini gprs gen_modis
call m lc6225_gemini gprs codegen_modis
IF NOT DEFINED MTK_COMPILE_SERVER set CMD_ARGU=-j16
IF NOT DEFINED MTK_COMPILE_SERVER set DISTRIBUTED_BUILD_CMD=XGConsole /command="
IF NOT DEFINED MTK_COMPILE_SERVER set DISTRIBUTED_BUILD_PARAMS=" /profile="profile.xml"
IF NOT DEFINED MTK_COMPILE_SERVER ./tools/IncrediBuildReg.exe
IF DEFINED MTK_COMPILE_SERVER set CMD_ARGU=-j4
IF DEFINED MTK_COMPILE_SERVER set DISTRIBUTED_BUILD_CMD=
IF DEFINED MTK_COMPILE_SERVER set DISTRIBUTED_BUILD_PARAMS=
BuildConsole ./MoDIS/modis.dsw /build /log=log.txt
pause
7.一般来说,编绎结束后,我们需要把生成的BIN软件和数据库校准文件打包发给测试部门或者客户,这一过程也是可以使用脚本的。
cd ../../build
@for /d %%x in (*) do cd %%x
for %%x in (*.bin) do set a=%%x
rar a ../../%a%.rar %a%
cd tst/database_classb/
rar a ../../%a%.rar BPLGUInfo*SrcP_*
把该脚本放在MAIN文件夹下,编绎完成后可以执行他,就可以把需要的文件使用项目名称打包。当然你如果需要邮件发给客户,大约可以写一个VBS脚本执行这一过程,这里不再赘述。
8.如果是下班情况下,就可以把以上的批处理使用CALL串连起来,甚至把多个项目串连起来执行。然后你就可以下班走人,让电脑做你以上的工作。当然这还不完美,因为你的电脑做完这些工作后,并没有休息,他还在消耗公司的电力资源,这是不应该的。最后一条指令,自动关机。
at 23:30 shutdown -s
这条指令的操作,可以实现在23:30分自动关机,也许你觉得这还不完善,因为也许你的电脑早早的就完成了工作,也许23:30还没有完成,你可以自己在AT后设置任意的时间,如果你害怕自己估计不准,那就把最后一条指令去掉AT和时间,然后加到最后一个批处理里,比如我们最后一个批处理可能是第七条,可以这样写:
cd ../../build
@for /d %%x in (*) do cd %%x
for %%x in (*.bin) do set a=%%x
rar a ../../%a%.rar %a%
cd tst/database_classb/
rar a ../../%a%.rar BPLGUInfo*SrcP_*
shutdown -s
压缩文件完成后就可以关机
还有几个注册表文件也挺有用。
在右键添加CMD,可以直接打开带路径的CMD,用于编绎:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/Folder/shell/cmd/Command]
@="Cmd.exe /k cd /"%1/""
[HKEY_CLASSES_ROOT/Directory/shell/CMD/cmd]
@="Cmd.exe /k cd /"%1/""
[HKEY_CLASSES_ROOT/Drive/shell/cmd]
@="Cmd.exe /k cd /"%1/""
在右键添加重命名PBM菜单,可以把选中文件夹里的文件改为扩展名为PBM
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/Folder/shell/ren PBM]
[HKEY_CLASSES_ROOT/Folder/shell/ren PBM/Command]
@="Cmd.exe /c cd /"%1/" & ren *.bmp *.PBM"
在右键添加重合名BMP菜单,可以把选中文件夹里的扩展名为PBM的改为BMP
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/Folder/shell/ren bmp]
[HKEY_CLASSES_ROOT/Folder/shell/ren bmp/Command]
@="Cmd.exe /c cd /"%1/" & ren *.pbm *.bmp"