在日常项目开发中,除了编写业务逻辑外,还需处理一些琐事,如资源更新、单元测试和资源压缩等。本文旨在介绍如何通过脚本处理这些琐事,让开发者能够专注于业务开发。
脚本可以简单理解为一条条可见的文字命令(如可通过记事本查看、编辑)。脚本程序在执行时,由系统解释器逐条翻译成机器可识别的指令,并按顺序执行。由于脚本执行时需要额外的翻译过程,其效率略低于二进制程序。
需求描述:项目中设置了崩溃异常捕获机制,崩溃时会保存栈信息到SD卡的.crash文件夹中。但这些信息是单行文本,长度较长时难以定位问题。例如:
atandroid.app.FragmentManagerImpl.moveToState(FragmentManager.java:993) at android.app.FragmentManagerImpl
问题在于转义字符保存不正确, 变成了\n, 变成了\t。手动转换非常耗时。
使用脚本:
方案一:用C语言编写控制台程序,读取文件内容,将\n转换为 ,\t转换为 。用批处理调用此程序,传入文件路径作为参数。C语言代码如下:
char buff[300000] = {0};
ifstream myfile(argv[1]);
myfile.read(buff, 300000);
myfile.close();
int len = strlen(buff);
// 处理 \n 和 \t 转换为 和
for (size_t i = 0; i != len - 1; i++)
{
if (buff[i] == '' && buff[i + 1] == 'n')
{
buff[i] = ' ';
buff[i + 1] = ' ';
}
else if (buff[i] == '' && buff[i + 1] == 't')
{
buff[i] = ' ';
buff[i + 1] = ' ';
}
}
生成convertLog.exe,并在批处理中调用:
call convertLog %1
直接将崩溃文件拖到批处理上,批处理会将文件路径作为参数传递给convertLog.exe。
方案二:用Python直接转换,代码如下:
# -- coding:utf-8 --
text = open('crash.cr').read()
print(text.replace("\n", " ").replace("\t", " "))
两行代码即可完成转换,需Python3环境。
需求描述:项目为1920×1080分辨率的设备开发,但需适配1080×720分辨率的新设备。由于没有新设备样机,无法直接测试。
具体步骤:
由于需频繁切换分辨率,利用脚本自动化此过程:
脚本方案:
预先修改好不同分辨率的build.prop文件,直接push对应的文件。具体代码如下:
set device=M166023E2K
adb -s %device% root
adb -s %device% remount
adb -s %device% shell "chmod 777 /system/build.prop"
adb -s %device% push 320/build.prop /system/
adb -s %device% shell "wm size 720x1280"
adb -s %device% reboot
pause
修改文件路径和分辨率即可切换。编写两个批处理文件,运行对应批处理即可快速切换。
需求描述:项目中使用图片、音频、视频、字体和H5页面等资源,更新时需同步到res或assets文件夹。以图片为例:
常规做法:视觉设计师将图片放到服务器,软件开发人员从服务器拷贝到工程资源文件夹,可能遇到:
使用脚本:在Windows下使用批处理,从服务器拷贝图片到res文件夹并重命名。关键代码如下:
@echo off
set SRC_PATH=92.168.100.230项目文件某个项目
set DEST_PATH=D:项目某个项目 es
set src_name=%1
set dest_name=%2
copy "%SRC_PATH%%src_name%.png" "%DEST_PATH%%dest_name%.png"
将此批处理命名为pullPic.bat,处理单个图片。
为实现批量操作,需改名表。用Excel保存改名表,A列为批处理命令,B列为批处理名称,C列为原名称,D列为目标名称。
将ABCD列内容复制到文本文件,保存为pullAllPic.bat,直接运行即可更新资源。
需求描述:为了减小apk体积,需压缩资源图片。
压缩方法:
方法一:使用www.tinypng.com网站压缩,需上传、下载、解压,存在泄漏风险。
方法二:使用PngYu拖动图片文件夹压缩,但仍需手动操作。PngYu使用pngquant.exe进行压缩。
利用脚本直接调用pngquant.exe压缩,关键代码如下:
echo "开始处理..."
for /R %%i in (123*.png) do (
pngquant -f --ext .png --quality 80-80 "%%i"
)
pause
80这个参数经过验证,不失真且压缩率高。发布apk前双击批处理即可完成资源压缩。
需求描述:使用adb的monkey命令进行随机事件测试,测试项目稳定性。要求连续48小时monkey不出现闪退和ANR,测试后将结果拷贝到服务器。
使用脚本:脚本可自动化此过程。脚本如下:
@echo off
adb shell monkey -p com.example.test -vvv 100000 >test.txt
copy test.txt 92.168.100.230个人文件monkey
pause
运行10万次monkey,完成后将结果拷贝到服务器。需要测试时,双击运行脚本即可。
将上述脚本整合,定义自定义脚本控制台:
步骤一:在项目根目录新建scripts文件夹,将脚本放入,分别命名为updateRes.bat(更新资源)、zipRes.bat(压缩资源)、unitTest.bat(单元测试)、runMonkey.bat(Monkey测试)。注意调整相对路径。
步骤二:定义与项目名称相同的批处理,如TestProject.bat,用于调度其他批处理。代码如下:
@echo off
if "%1"=="updateRes" call updateRes.bat goto END
if "%1"=="zipRes" call zipRes.bat goto END
if "%1"=="runMonkey" call runMonkey.bat goto END
if "%1"=="unitTest" call unitTest.bat goto END
echo wrong param
:END
pause
步骤三:将scripts文件夹添加到系统环境变量中。
使用:在任何地方打开命令行,输入TestProject updateRes即可更新资源,其他操作类似。
我们的目标是实现项目的一键测试、一键部署、一键发布,让开发者专注于业务逻辑。批处理文件也是文档,新人可通过查看脚本了解项目工作流程。
以上只是简单应用,还有更多需求可通过脚本实现。工作中遇到重复任务时,应考虑使用工具自动化,提升效率。
本文版权归Open软件开发小组所有,如需转载请联系主编申请授权。
以上就是脚本在安卓项目开发中的一些简单应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号