使用Kotlin写脚本
前言
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文件就可以雙擊執行了:
實戰
但我們學會了如何寫腳本來做什么呢?腳本能做的事就多了,比如:
1.一鍵執行一些復雜操作,更安全更簡便,解放雙手和大腦
假如你是一個安卓開發,給測試人員安裝測試包的時候需要同時安裝多個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")}執行結果如下:
?2.爬蟲
比如我們簡單的獲取一個網頁的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:更不要用爬蟲去做壞事哦!
3.做一些適合你的小玩意
由于kotlin的語法很簡潔,而且能使用java的東西,所以能做的東西很多,可以很快的根據你的需求十來行代碼寫一個腳本工具
要學習更多的kotlin基礎知識,比如語法:?
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写脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RecyclerView复杂适配器的终极
- 下一篇: KMM+Compose 开发一个Kotl