赞
踩
Kotlin不仅可以用来写Android,也可以写后端,Desktop桌面程序,脚本(和未来的ios,网页,native等)
比如开发时使用Gradle的build.gradle也可以使用kotlin脚本编写,只需要将后缀改为kts即可声明为kotlin脚本文件,如build.gradle.kts,迁移指南:迁移gradle至kts
可以说kotlin的功能非常的全,基本学会一门语言吃遍天下了
那普通的脚本如何用kotlin来写呢?
首先需要下载安装jdk并配置一下jdk的环境变量:
jdk下载: https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe
jdk环境变量配置参考: JDK的环境变量配置
然后下载并配置kotlin脚本的环境变量:
kotlin环境下载:
如果你网络不好的话,可以通过百度云盘下载:
链接:https://pan.baidu.com/s/1A2s1qMd0pfAWTpk9atsw-g
提取码:d9be
如果你网络好的话,可以通过Github下载到最新的: Releases · JetBrains/kotlin (github.com)
然后下载的压缩包解压,比如解压到D盘的kotlinc目录下,进入到其bin目录下复制目录,如: D:\kotlinc\kotlinc\bin
然后把这个路径配置到path环境中,如下图序:
右键我的电脑->属性->往下滑动找到高级系统设置
点环境变量
双击path
点新建然后将刚才复制的路径粘贴进去
然后一路点击确定将这些窗口都关闭掉,这样环境变量就都配置好了,接下来可以写脚本了
在编程界有个不成文的规定,就是学任何语言或者特性前,先用你学的东西打印一个Hello World试试手,接下来我们就使用kts脚本来打印一下
我们先在D盘新建一个hello.kts文件
然后右键编辑输入并保存
println("Hello World")
然后我们通过命令来执行此脚本
Win+R输入cmd打开命令行
分别输入以下命令,后面有注释什么意思
- D: //将命令行的执行目录切换到D盘根目录
- kotlinc -script test.kts //表示用配置的kotlin环境来执行本目录的脚本:test.kts
执行情况如下:
如果你的环境配置正确的话,就可以看到打印出来Hello World了 ,如果报错的话就检查一下你写的是否有问题和环境变量配置是否正确
但是每次都是用命令行就太麻烦了,所以我们配置一下kts的快捷方式,使其双击就能运行
1.首先新建一个文件,取名为: 执行kts.bat
2.右键编辑,输入以下代码,保存
- call kotlinc-jvm -script %~1
- pause
这里简单解释一下这些命令的作用:
call 表示在本命令行中执行一些命令,不带call 可能会使该命令在新的命令行中执行
%~1 表示输入的文本的第一个,这里可以理解为,我拖入一个文件到这个文件上,这个文本1就表示这个文件的全路径
kotlinc-jvm -script %~1 那这个命令就是使用kotlin-jvm的运行方式运行kts脚本,并且路径是传入的文本1
pause 就是暂停当前的命令行,直到接收到用户的输入才会走向下一行,而下一行如果没有代码,命令行就会直接退出,导致你看不到其中的内容,执行效果如下:
3.设置快捷方式
我们找到刚才写的test.kts,右键->打开方式->选择其他应用->勾选始终使用此应用打开.kts文件->往下滑->更多应用->往下滑->在这台电脑上查找其他应用->找到你的执行kts.bat->打开,这样你就发现可以执行了,而且kts文件就可以双击执行了:
但我们学会了如何写脚本来做什么呢?脚本能做的事就多了,比如:
假如你是一个安卓开发,给测试人员安装测试包的时候需要同时安装多个apk,你会怎么做呢?
可能全部复制到手机内存卡中,然后一个一个点击安装
也可能通过扫二维码一个一个装
也可以使用adb命令来一个一个装
但如果你使用脚本并且配置有adb环境的话,就可以写一个kts脚本,每次安装时只需要将手机插上,执行一次脚本即可,脚本如下(如果你想,还可以在安装完成播放一段音乐2333):
- /**
- * 打印命令
- * 执行命令
- * 打印结果
- * [return]是否执行成功
- */
- fun runAndWaitExec(cmd: String): Boolean {
- println(cmd)
- val exec = Runtime.getRuntime().exec(cmd)
- exec.waitFor()
- println(String(exec.inputStream.readAllBytes()))
- val error = String(exec.errorStream.readAllBytes())
- println(error)
- return error.isEmpty()
- }
-
- java.io.File("apks").listFiles()//获取当前目录下的apks目录下的所有文件
- .map { it.absolutePath }//将文件转换成他们的具体路径
- .filter { it.endsWith(".apk") }//过滤一下文件名,只要.apk结尾的文件
- .forEach {//循环执行adb的安装apk命令
- runAndWaitExec("adb install -r -d -t $it")
- }
执行结果如下:
比如我们简单的获取一个网页的html数据并存到本地文件中:
- println("开始爬")
- val htmlText = java.net.URL("https://www.baidu.com").readText()//从百度的网站中读取所有内容
- println("保存到本地")
- val file = java.io.File("test.txt")//声明一个文件对象
- file.createNewFile()//创建出这个文件对象
- file.writeText(htmlText)//将爬取的内容输出到文件中
- println("爬完了")
ps:由于我们都可以使用kotlin和java中的基础库内容,所以可以很简单的写出一个爬虫,但更复杂的我就不献丑了
pps:更不要用爬虫去做坏事哦!
由于kotlin的语法很简洁,而且能使用java的东西,所以能做的东西很多,可以很快的根据你的需求十来行代码写一个脚本工具
要学习更多的kotlin基础知识,比如语法:
如果英语好的话可以去官网学习: Kotlin官方文档
kotlin脚本的文档: Get started with Kotlin custom scripting – tutorial | Kotlin (kotlinlang.org)
目前脚本对动态字符串代码执行的支持不太好,貌似只能生成一个文件然后用命令去调用它,希望后续有改进.
你也可以把kts脚本当作别的后缀的打开方式,可以通过使用如下bat命令来转发到kts文件做到:
这个.kst后面的内容就是相当于传进main方法中的参数,比如可以使用args[0]获取到传入的路径
- call kotlinc-jvm -script test.kts "%~1"
- pause
我们可以给脚本加上远程依赖的能力,比如我们使用gson来解析json:
- @file:DependsOn("com.google.code.gson:gson:2.8.7")//引用gson的远程依赖
- val json:String=com.google.gson.Gson().toJson(listOf("123","abc","234"))//解析json
- println(json)//打印json
我们执行它:
ps:注意使用远程依赖的脚本必须以.main.kts来作为后缀名,如:a.main.kts,而普通脚本可以写做:a.kts
pps:如果你的远程依赖不是默认的MavenCenter地址中的,就需要在远程依赖代码的上方写上如下代码来标示远程依赖服务器地址:
@file:Repository("https://xxx")
就酱
end
对Kotlin或KMP感兴趣的同学可以进Q群 101786950
如果这篇文章对您有帮助的话
可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。