[源码] Gradle下载器-解决你gradle下载速度慢的问题

逍遥乐

共 2507字,需浏览 6分钟

 ·

2024-04-10 17:37

文章 目录

  • 前言

  • 一、简要的代码片段

  • 二、小工具获取


前言

最近使用gradle编译安卓的时候又出现了gradle下载超时的问题,经常性地手动下载再复制到目录,确实每次都做,每次都很繁琐。

于是有了今天这个软件地诞生,先放个截图。
678efbc7dff7908c9fdc85cef2ddf890.webp

该软件会自动从腾讯镜像下载gradle并自动放到该放的位置

一、简要的代码片段

小工具是使用jetpack compose for desktop编写的,实际上也没有什么技术含量,简单地分享几个代码片段。

  1. 点击按钮时启动下载线程

    Button({
for (fName in gradleFileNames.split("\n")) {
val fileName = fName.trim().removeSuffix(".zip")
if (fileName.isNotEmpty()) {
gradleFileDirName = getFolderName("https://services.gradle.org/distributions/${fileName}.zip")
val src = "${gradleSrcUrl}/${fileName}.zip"
val tarFilePath = "${gradleDir}\\wrapper\\dists\\${fileName}\\${gradleFileDirName}\\$fileName.zip"
thread {
Downloader.download(src, tarFilePath) { status ->
println("callback status $status")
appendTaskStatus(status)
}
}
}
}
}) {
Text("下载")
}
  1. 读取服务器文件的内容

        fun fileContent(fileUrl: String): String?{
try {
val conn = URI(fileUrl).toURL().openConnection()
if(conn.contentType.startsWith("text/plain;")) { //text/plain; charset=utf-8
val contentStream = conn.content as InputStream
val content = contentStream.readAllBytes().decodeToString()
return content
}
}catch (e: Exception){
println("exception $e")
}
return null
}
  1. 下载网络二进制文件

    fun download(fileURL: String, savePath: String, callback: (DownloadStatus)->Unit){
callback(DownloadStatus("新的任务 from $fileURL, to $savePath", fileURL, savePath))
try {
val conn = URI(fileURL).toURL().openConnection()
val inputStream = conn.getInputStream()
val tarDir = File(File(savePath).parent)
if(!tarDir.exists()){
if(!tarDir.mkdirs()){
callback(DownloadStatus("创建目标文件夹失败 $tarDir", fileURL, savePath))
return
}
}
callback(DownloadStatus("开始下载 $fileURL", fileURL, savePath))
val tmpPath = "$savePath.tmp"
val tarFile = File(tmpPath)
tarFile.createNewFile()
val buff = inputStream.readAllBytes()
val fos = FileOutputStream(tarFile)
fos.write(buff)
fos.close()
inputStream.close()
callback(DownloadStatus("下载完成 $savePath", fileURL, savePath))
File(tmpPath).renameTo(File(savePath))
} catch (e: Exception) {
println("catch a exception $e")
callback(DownloadStatus("下载失败:$e", fileURL, savePath))
}
println("download finish $fileURL, to $savePath")
}
  1. 其中DownloadStatus的定义(用于整合下载状态)

        class DownloadStatus(
val message: String,
val fromUrl: String="",
val toPath: String="",
val error: String="",
val date: String= Date().toString(),
val attachedList: MutableList<DownloadStatus> = mutableListOf()
)
二、小工具获取

回复关键词 “gradle下载器" 获取。

点击左下角阅读原文查看Gitee开源仓库。

浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报