当你想用Gitee对你的APP文件上传下载时
你的安卓APP的APK文件想找个免费的地方存放并且维护管理(上传下载),你又不想存在自己的服务器上,那么Gitee就挺不错的;
我的示例:
https://gitee.com/zhuangbinan/my-app-download
通过创建发行版,上传你的APK文件
点击发行版的 全部按钮
可以看到所有的版本
注意地址栏的地址:
https://gitee.com/zhuangbinan/my-app-download/releases
创建发行版 , 只要输入一个版本号就可得到一个下载地址;
当我把鼠标放在这个位置的时候,可以看到APK文件的下载地址;
地址为:
https://gitee.com/zhuangbinan/my-app-download/attach_files/943167/download/PAPP-1.0.4_faker.apk
这就是下载地址了;当你的APP需要更新,你放上这个地址,就可以下载最新的APP了;
你以为这篇无聊的文章到这里就结束了吗? No no no…
这里的链接会变化,例如上一个版本的链接是:
https://gitee.com/zhuangbinan/my-app-download/attach_files/943154/download/PAPP-1.0.3_faker.apk
很明显是不同的,那么你每次更新到新版APP的时候都要复制粘贴这个地址;
我感觉有点麻烦,不够优雅;
还记得一开始的"创建发行版"的按钮吗? 输入版本号就可以创建了;
我分析了一下Gitee的URL;
但我点击这个页面的这里:
会来到最新版的这个URL:
https://gitee.com/zhuangbinan/my-app-download/releases/1.0.4
https://gitee.com/zhuangbinan/my-app-download/releases/1.0.4
最后面的1.0.4是版本号,这个url的前面是不会变的,当新版上传上去以后,
会变成:
https://gitee.com/zhuangbinan/my-app-download/releases/新版本号
在这个URL页面里也有最新版的APK的下载地址,通过F12就能找到;
那么我们只需要记住最新版的版本号,就可以获得最新版的下载地址;
那么怎么获取最新版的下载地址呢?
我看F12的network,发现
https://gitee.com/zhuangbinan/my-app-download/releases/新版本号
返回的是一个HTML,用程序并不方便(可能是我水平问题)找到那个下载的url
我用PostMan访问
https://gitee.com/zhuangbinan/my-app-download/releases/新版本号
返回的却是JSON格式的数据
HTML页面的url
用PostMan访问返回的是JSON数据:
{
"release": {
"tag": {
"name": "1.0.4",
"path": "/zhuangbinan/my-app-download/tags/1.0.4",
"tree_path": "/zhuangbinan/my-app-download/tree/1.0.4",
"message": "",
"commit": {
"id": "37872ea0c8007ea530fbe7ff4163a65887aac39a",
"short_id": "37872ea",
"title": "我的app,版本号:1.0.1",
"title_markdown": "我的app,版本号:1.0.1",
"description": "",
"description_markdown": "",
"message": "我的app,版本号:1.0.1\n",
"message_markdown": "我的app,版本号:1.0.1\n",
"detail_path": "/zhuangbinan/my-app-download/commit/37872ea0c8007ea530fbe7ff4163a65887aac39a",
"commits_path": "/zhuangbinan/my-app-download/commits/37872ea0c8007ea530fbe7ff4163a65887aac39a",
"tree_path": "/zhuangbinan/my-app-download/tree/37872ea0c8007ea530fbe7ff4163a65887aac39a",
"author": {
"name": "庄毕楠",
"email": "@qq.com",
"username": "zhuangbinan",
"user_path": "/zhuangbinan",
"enterprise_user_path": null,
"image_path": "no_portrait.png#庄毕楠-zhuangbinan",
"is_gitee_user": true,
"is_enterprise_user": null
},
"committer": {
"name": "庄毕楠",
"email": "@qq.com",
"username": "zhuangbinan",
"user_path": "/zhuangbinan",
"enterprise_user_path": null,
"image_path": "no_portrait.png#庄毕楠-zhuangbinan",
"is_gitee_user": true,
"is_enterprise_user": null
},
"authored_date": "2022-01-13T10:01:03+08:00",
"signature": null,
"build_state": null
},
"archive_path": "/zhuangbinan/my-app-download/repository/archive/1.0.4",
"signature": null
},
"operating": {
"edit": false,
"download": true,
"destroy": false,
"enterprise_forbid_zip": false
},
"release": {
"title": "2022-01-13_faker_1.0.4 最新版",
"path": "/zhuangbinan/my-app-download/releases/1.0.4",
"created_at": "2022-01-13T10:41:58+08:00",
"is_prerelease": false,
"description": "<p>2022-01-13_faker_1.0.4 最新版</p>",
"content_pass": true,
"author": {
"name": "庄毕楠",
"username": "zhuangbinan",
"path": "/zhuangbinan",
"avatar_url": "no_portrait.png#庄毕楠-zhuangbinan"
},
"attach_files": [
{
"download_url": "/zhuangbinan/my-app-download/attach_files/943167/download/PAPP-1.0.4_faker.apk",
"name": "PAPP-1.0.4_faker.apk"
}
]
}
}
}
这就找到了
"attach_files": [
{
"download_url": "/zhuangbinan/my-app-download/attach_files/943167/download/PAPP-1.0.4_faker.apk",
"name": "PAPP-1.0.4_faker.apk"
}
]
用Java代码实现:
import cn.gitee.release.ReleaseList;
import cn.utils.HttpComponent;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import java.text.ParseException;
import java.util.*;
public class TestPlace {
@Test
void testGitee() throws JsonProcessingException {
HttpComponent httpComponent = new HttpComponent();
String versionTag = "1.0.4";//更新的时候填的TAG,不能有误
// 想要获取最新版本,查id最大的值就是最新版
String url = "https://gitee.com/zhuangbinan/my-app-download/releases/" + versionTag;
//Headers 模拟PostMan才返回JSON格式
Map<String,String> headers = new HashMap<>();
headers.put("User-Agent","PostmanRuntime/7.26.8");
headers.put("Accept","*/*");
String jsonString = httpComponent.get(url, headers);
ObjectMapper mapper = new ObjectMapper();
//ReleaseList 是 JSON解析成的对象
ReleaseList releaseList = mapper.readValue(jsonString, ReleaseList.class);
String download_url = releaseList.getRelease().getRelease().getAttach_files().get(0).getDownload_url();
String pre_url = "https://gitee.com";
String result = pre_url + download_url;
System.out.println(result);
}
}
这就能拿到最新的下载地址了;
对JSON反序列化成Java对象借助了在线工具"JSON生成Java实体类"
https://www.bejson.com/json2javapojo/new/
吐槽一下IDEA的插件:JSONParser
对为null的属性直接不解析,这是一个缺点;这个在线工具会把null的属性解析为String类型,这有可能会出现异常的;
这段代码里的HTTP工具类HttpCompnent我放在这:
HttpCompnent 下载
over.