You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Android应用(Java)将更新的Excel文件推送至GitHub

Android应用推送Excel文件至GitHub的实现方案

核心思路

把Excel文件当作GitHub仓库中的普通文件处理,通过GitHub的API(而非Git命令)完成更新推送,这是移动端最可行的路径。

1. 前期准备

  • 生成GitHub个人访问令牌(PAT):在GitHub账号设置中生成,需勾选repo权限(仓库读写权限),令牌务必妥善存储,禁止硬编码在代码中,可存在Android Keystore或加密的SharedPreferences里。
  • 确认仓库信息:记清楚目标仓库的所有者名称、仓库名,以及Excel文件在仓库内的相对路径(比如assets/data/records.xlsx)。

2. 两种实现方式

方式一:使用GitHub Java客户端库(推荐)

借助封装好的第三方库简化API调用,减少重复代码:

  • 首先在Module级build.gradle添加依赖:
implementation 'org.kohsuke:github-api:1.317'
  • 按钮点击事件中的核心逻辑(需在子线程执行,避免ANR):
// 初始化客户端
GitHub github = new GitHubBuilder().withOAuthToken("你的PAT令牌").build();
// 获取目标仓库
GHRepository repo = github.getRepository("仓库所有者/仓库名");
// 读取本地更新后的Excel文件
File localExcel = new File(getFilesDir(), "updated_data.xlsx");
// 获取仓库中现有文件的SHA值(更新文件必须提供此值)
GHContent existingFile = repo.getFileContent("仓库内文件路径");
// 执行更新推送
repo.createContent()
    .path("仓库内文件路径")
    .content(new FileInputStream(localExcel))
    .message("Update Excel via Android App")
    .sha(existingFile.getSha())
    .commit();

方式二:直接调用GitHub REST API

若不想依赖第三方库,可通过OkHttp/Retrofit直接发送HTTP请求:

  • 核心是调用GitHub的Update a file接口(PUT请求),步骤分为两步:
    1. 先发送GET请求获取现有文件的SHA值:
      请求URL:https://api.github.com/repos/{所有者}/{仓库名}/contents/{文件路径}
      请求头需携带Authorization: token 你的PAT和Accept: application/vnd.github.v3+json
    2. 将本地Excel文件编码为Base64,构建PUT请求体(包含提交信息、Base64内容、SHA值),发送更新请求。
  • 示例代码(OkHttp实现,需在子线程执行):
OkHttpClient client = new OkHttpClient();

// 第一步:获取现有文件SHA
Request shaReq = new Request.Builder()
    .url("https://api.github.com/repos/xxx/xxx/contents/data.xlsx")
    .header("Authorization", "token 你的PAT")
    .build();
Response shaResp = client.newCall(shaReq).execute();
String shaJson = shaResp.body().string();
// 解析JSON提取sha值(可用Gson或手动解析)
String fileSha = ...;

// 第二步:编码本地文件为Base64
File localExcel = new File(getFilesDir(), "updated_data.xlsx");
byte[] fileBytes = Files.readAllBytes(localExcel.toPath());
String base64Content = Base64.encodeToString(fileBytes, Base64.DEFAULT);

// 构建更新请求体
String reqBody = String.format("{\"message\":\"Update Excel\",\"content\":\"%s\",\"sha\":\"%s\"}", base64Content, fileSha);
Request updateReq = new Request.Builder()
    .url("https://api.github.com/repos/xxx/xxx/contents/data.xlsx")
    .header("Authorization", "token 你的PAT")
    .header("Accept", "application/vnd.github.v3+json")
    .put(RequestBody.create(reqBody, MediaType.get("application/json")))
    .build();
Response updateResp = client.newCall(updateReq).execute();

// 处理响应结果
if (updateResp.isSuccessful()) {
    // 推送成功逻辑
} else {
    // 错误处理逻辑
}

3. 关键注意事项

  • 网络权限:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />
  • 线程处理:所有网络操作必须在子线程执行,可使用Coroutines、AsyncTask或RxJava实现
  • 文件大小限制:GitHub API单文件最大支持100MB,若Excel过大需考虑Git LFS(移动端处理较复杂,优先控制文件大小)
  • 错误处理:需捕获网络异常、权限不足、文件不存在等情况,给用户明确的反馈提示

内容的提问来源于stack exchange,提问作者Ameya Gawde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:06:25