feat: 同步本地代码到远程仓库

- 新增WebDAV同步功能相关文件
- 新增CustomSwitch自定义开关组件
- 新增SyncCodeManager、UpdateInstaller、WebDAVSyncManager工具类
- 新增build_all_release.sh构建脚本
- 更新多个Dialog和Activity文件
- 更新字符串资源文件
- 删除apk/release目录下的旧文件
This commit is contained in:
您的名字
2025-11-10 19:05:21 +08:00
parent e7e215628b
commit e0aee44d5a
43 changed files with 4244 additions and 391 deletions
@@ -49,6 +49,77 @@ public class Github {
}
}
/**
* 将GitHub Release下载URL转换为jsDelivr CDN URL
* 例如: https://github.com/Tosencen/XMBOX/releases/download/v3.1.0/mobile-arm64_v8a-v3.1.0.apk
* 转换为: https://cdn.jsdelivr.net/gh/Tosencen/XMBOX@v3.1.0/mobile-arm64_v8a-v3.1.0.apk
*
* @param githubUrl GitHub Release下载URL
* @param tagName Release标签名(如 "v3.1.0"
* @param fileName 文件名
* @return jsDelivr CDN URL
*/
public static String convertToJsDelivrUrl(String githubUrl, String tagName, String fileName) {
try {
// 尝试从GitHub URL中提取信息
// 格式: https://github.com/{owner}/{repo}/releases/download/{tag}/{file}
if (githubUrl.contains("/releases/download/")) {
String[] parts = githubUrl.split("/releases/download/");
if (parts.length == 2) {
String basePath = parts[0]; // https://github.com/Tosencen/XMBOX
String[] baseParts = basePath.split("/");
if (baseParts.length >= 2) {
String owner = baseParts[baseParts.length - 2];
String repo = baseParts[baseParts.length - 1];
// 使用jsDelivr CDN格式
String jsDelivrUrl = "https://cdn.jsdelivr.net/gh/" + owner + "/" + repo + "@" + tagName + "/" + fileName;
Logger.d("Github: URL转换: " + githubUrl + " -> " + jsDelivrUrl);
return jsDelivrUrl;
}
}
}
// 如果无法匹配,使用默认仓库信息构建
String jsDelivrUrl = "https://cdn.jsdelivr.net/gh/Tosencen/XMBOX@" + tagName + "/" + fileName;
Logger.d("Github: 使用默认格式构建URL: " + jsDelivrUrl);
return jsDelivrUrl;
} catch (Exception e) {
Logger.e("Github: URL转换失败: " + e.getMessage());
// 转换失败时返回原URL
return githubUrl;
}
}
/**
* 将GitHub raw URL转换为jsDelivr CDN URL
* 例如: https://raw.githubusercontent.com/Tosencen/XMBOX-Release/main/apk/release/mobile-arm64_v8a-v3.1.0.apk
* 转换为: https://cdn.jsdelivr.net/gh/Tosencen/XMBOX-Release@main/apk/release/mobile-arm64_v8a-v3.1.0.apk
*
* @param rawUrl GitHub raw URL
* @return jsDelivr CDN URL,如果转换失败则返回原URL
*/
public static String convertRawToJsDelivrUrl(String rawUrl) {
try {
// 格式: https://raw.githubusercontent.com/{owner}/{repo}/{branch}/{path}
if (rawUrl.contains("raw.githubusercontent.com/")) {
String path = rawUrl.substring(rawUrl.indexOf("raw.githubusercontent.com/") + "raw.githubusercontent.com/".length());
String[] parts = path.split("/", 3);
if (parts.length >= 3) {
String owner = parts[0];
String repo = parts[1];
String filePath = parts[2];
String jsDelivrUrl = "https://cdn.jsdelivr.net/gh/" + owner + "/" + repo + "@main/" + filePath;
Logger.d("Github: Raw URL转换: " + rawUrl + " -> " + jsDelivrUrl);
return jsDelivrUrl;
}
}
// 转换失败时返回原URL
return rawUrl;
} catch (Exception e) {
Logger.e("Github: Raw URL转换失败: " + e.getMessage());
return rawUrl;
}
}
// 智能检测是否使用国内镜像
public static boolean useCnMirror() {
// 如果已经测试过并且在24小时内,直接返回上次的结果