0

0

脚本在安卓项目开发中的一些简单应用

雪夜

雪夜

发布时间:2025-06-22 08:14:14

|

358人浏览过

|

来源于php中文网

原创

前言

在日常项目开发中,除了编写业务逻辑外,还需处理一些琐事,如资源更新、单元测试和资源压缩等。本文旨在介绍如何通过脚本处理这些琐事,让开发者能够专注于业务开发。

一、脚本的定义

脚本可以简单理解为一条条可见的文字命令(如可通过记事本查看、编辑)。脚本程序在执行时,由系统解释器逐条翻译成机器可识别的指令,并按顺序执行。由于脚本执行时需要额外的翻译过程,其效率略低于二进制程序。

二、使用场景示例

1. 崩溃日志格式化

需求描述:项目中设置了崩溃异常捕获机制,崩溃时会保存栈信息到SD卡的.crash文件夹中。但这些信息是单行文本,长度较长时难以定位问题。例如:

\n\tatandroid.app.FragmentManagerImpl.moveToState(FragmentManager.java\:993)\n\tat android.app.FragmentManagerImpl

问题在于转义字符保存不正确,\n变成了\\n,\t变成了\\t。手动转换非常耗时。

使用脚本:

方案一:用C语言编写控制台程序,读取文件内容,将\\n转换为\n,\\t转换为\t。用批处理调用此程序,传入文件路径作为参数。C语言代码如下:

char buff[300000] = {0};

ifstream myfile(argv[1]);

myfile.read(buff, 300000);

myfile.close();

int len = strlen(buff);

// 处理 \\n 和 \\t 转换为 \n 和 \t

for (size_t i = 0; i != len - 1; i++)

{

if (buff[i] == '\' && buff[i + 1] == 'n')

{

buff[i] = ' ';

buff[i + 1] = '\n';

}

else if (buff[i] == '\' && buff[i + 1] == 't')

{

buff[i] = ' ';

buff[i + 1] = '\t';

}

}

生成convertLog.exe,并在批处理中调用:

call convertLog %1

直接将崩溃文件拖到批处理上,批处理会将文件路径作为参数传递给convertLog.exe。

方案二:用Python直接转换,代码如下:

# -- coding:utf-8 --

text = open('crash.cr').read()

print(text.replace("\\n", "\n").replace("\\t", "\t"))

两行代码即可完成转换,需Python3环境。

2. 切换手机屏幕分辨率

需求描述:项目为1920×1080分辨率的设备开发,但需适配1080×720分辨率的新设备。由于没有新设备样机,无法直接测试。

具体步骤:

  1. 修改/system/build.prop文件中的ro.sf.lcd_density为320。
  2. 进入adb shell,输入“su”并回车。
  3. 输入“wm size 720x1280”(若无效,尝试“am display-size 720x1280”)并回车。
  4. 重启手机,设置生效,屏幕降为720p。

由于需频繁切换分辨率,利用脚本自动化此过程:

脚本方案:

预先修改好不同分辨率的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

修改文件路径和分辨率即可切换。编写两个批处理文件,运行对应批处理即可快速切换。

3. 资源更新

需求描述:项目中使用图片、音频、视频、字体和H5页面等资源,更新时需同步到res或assets文件夹。以图片为例:

常规做法:视觉设计师将图片放到服务器,软件开发人员从服务器拷贝到工程资源文件夹,可能遇到:

网奇IOS智能在线订单系统
网奇IOS智能在线订单系统

产品简介: 网奇IOS智能订单系统,是网奇公司研发的一款智能在线订单编辑以及管理系统。本系统适合使用在;在线报名、酒店预定、信息反馈、在线订单和在线投诉等等诸多应用上。本系统所有选项字段完全通过后台控制,在线报名系统可以变为在线预定系统,同时可以变为任何其它的系统,里面的栏目字段,可以任意添加、删除、 修改。本系统为网奇公司全国独家首创,顺应网络需求,安装十分便利,上传即可使用。产品特色:

下载
  1. 图片名称为中文,需改为英文。
  2. 文件多时,更新定位麻烦,常用全部替换。

使用脚本:在Windows下使用批处理,从服务器拷贝图片到res文件夹并重命名。关键代码如下:

@echo off

set SRC_PATH=\192.168.100.230\项目文件\某个项目

set DEST_PATH=D:\项目\某个项目\res

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,直接运行即可更新资源。

4. 资源压缩

需求描述:为了减小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前双击批处理即可完成资源压缩。

5. Monkey测试

需求描述:使用adb的monkey命令进行随机事件测试,测试项目稳定性。要求连续48小时monkey不出现闪退和ANR,测试后将结果拷贝到服务器。

使用脚本:脚本可自动化此过程。脚本如下:

@echo off

adb shell monkey -p com.example.test -vvv 100000 >test.txt

copy test.txt \192.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软件开发小组所有,如需转载请联系主编申请授权。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

401

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

620

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

354

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

259

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

607

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

647

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

604

2023.09.22

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Excel 教程
Excel 教程

共162课时 | 14.5万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号