抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

用一个脚本替代 Android studio 的 run,解决 OpenJDK Platform 无法释放的痛苦

这一切还得从 Windows 说起,毕竟自己用的 Mac 毫无察觉。

大多数公司的设备还是为 Windows ,所以这方面我一直饱受煎熬,但我是不可能把自己的电脑带过去用的,毕竟电脑的损耗还得自己承担,于是才有了这篇文章,相信用 Windows 的伙伴常常遇到这样的报错:

Failed to delete \build\intermediates\intermediate-jars\debug\classes.jar
\build\intermediates\intermediate-jars\debug\classes.jar 另一个程序正在使用此文件,进程无法访问。

至于原因,想必大家也都知道,就是 gradle 这货的进程在运行完后不会销毁,但又在不断的增加,导致电脑不光编译不了,还越来越卡慢。Mac 上也有这个问题,但 Mac 的内存清理机制没能允许这样的事发生,Mac 会在内存不足时干掉高内存占用的无用进程来清理内存,这也是 MacOS 唯一的内存清理方式。

说起来公司这台 Windows 配置并不低,32G 内存,I7-9700 3GHz,但用编程起来是真的糟糕,这里面也有公司的杀毒软件的一部分功劳(集团强制要求没办法),编译缓存目录都是被实时扫描的可想而知这种性能上的损耗。

所以,第一步就得先干掉后台无法释放的 OpenJDK Platform,可以用进程管理器去处理,但脚本更方便:

taskkill /F /im java.exe

那么这样一来,就得在每次 run 之前去执行这个命令,没问题,新建一个文本文件,然后粘贴上面的命令,改文件后缀为 bat ,每次在 Android studio 点 run 之前去双击一下这个 bat 脚本即可。就可以收获这样结果:

这种情况下就一定不会被之前的 gradle 进程持有了,但是还是不方便,因为我现在的这台机器几乎是 100% 的存在上一次留下的 gradle 进程。那么,干脆就不用 Android studio 的 run 功能了吧。

先了解下 Android studio 的 run 功能做了什么事,不说深的很简单,一,编译并安装,二,启动。对应命令就是

gradlew.bat app:installDebug

以及:

adb shell am start 

这些东西有过一些经验的开发也就都明白了,所以直接上完整脚本:

taskkill /F /im java.exe
chcp 65001
set JAVA_HOME=D:\"Program Files"\Android\"Android Studio"\jre
gradlew.bat app:installDebug & adb shell am start -n "com.package.name/.SplashingActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

注:

installDebug 后的 & 命令连接符不可省略为回车,因为 installDebug 执行完后会导致当前上下文中断于是无法执行 am start 命令。

chcp 65001 是为了解决 windows 控制台中文乱码问题。

JAVA_HOME 需要改为自己的,同时如果用空格请这样填写:

D:\"Program Files"\Android\"Android Studio"\jre

而不是:

"D:\Program Files\Android\Android Studio\jre"(这是错误的)

其次请自行配置 adb 的环境变量,指向 Android SDK 目录的 platform-tools 即可,再按 am start 的规则去配置包名以及需要启动的 LAUNCHER Activity。如果 am start 实在不会,就在 AS 的 默认 run 成功一次后,在AS 下面的 tab run 标签找一下,比如:

改完后将文件保存为 run.bat 存放到项目目录下,然后新建一个 Run/Debug Configurations:

一张图应该就很清楚了,最后将 run 这个脚本作为 Android studio 的 run 进行使用吧,每一次点击都会新建一个 terminal 标签,一般编译完在标签按一次上键然后回车即可。

以上,如果有更优方案,欢迎留言。

参考:

windows下批量杀死进程

Windows 10 Gradle: JAVA_HOME is set to an invalid directory

Windows批处理:路径中的空格

bat中的连接符


本站由以下主机服务商提供服务支持:

0条评论

发表评论