KingCrimsonJY / YoudaoDictModule

A magisk module for YoudaoDict

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Magisk模块在线更新模板

这是一个适配 Magisk的versionCode大于等于24000的模块在线更新(updateJson)模板

使用方法

一、了解相关文件

文件 类型 功能
.github/workflows/release.yml 文件 工作流文件
module_files 文件夹 存放您模块的相关文件
module.json 文件 Magisk检测模块更新的依赖文件
module.md 文件 Magisk模块检测到更新,点击更新后,将会弹出更新日志

二、适配您的模块

  1. 复制文件:将您的模块文件夹复制到仓库根目录,像案例中module_files文件夹一样。如果您有您的想法,请遵循您的想法
  2. 修改.github/workflows/release.yml:根据注释修改相关代码
# 本仓库的模块文件名为module_files,下文的url已写入相关文件,可供参考
# 下文所有"- name:"的后面的文案均为步骤名,可自行修改
    # release为工作流名,可自行修改
name: release
on:
  push:
    # 根据以下链接定制您的触发条件
    # https://docs.github.com/zh/actions/using-workflows/triggering-a-workflow
    # https://docs.github.com/zh/actions/using-workflows/events-that-trigger-workflows
    # https://docs.github.com/zh/actions/managing-workflow-runs/skipping-workflow-runs
    branches:
      - main
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main
      - name: 1. 准备文件
        run: |
          echo "version=$(jq -r .version $GITHUB_WORKSPACE/module.json)" >> $GITHUB_ENV
          echo "versionCode=$(jq -r .versionCode $GITHUB_WORKSPACE/module.json)" >> $GITHUB_ENV
        # ModuleFolderName的变量值需要修改为您模块文件夹的名字
          echo "ModuleFolderName=module_files" >> $GITHUB_ENV
        # 此处可根据您的需求添加您需要的shell语句
      - name: 2. 制作模块
        run: |
          mkdir -p "$GITHUB_WORKSPACE"/GithubRelease
          echo "version=$version" >>$GITHUB_WORKSPACE/$ModuleFolderName/module.prop
          echo "versionCode=$versionCode" >>$GITHUB_WORKSPACE/$ModuleFolderName/module.prop
          cd $GITHUB_WORKSPACE/$ModuleFolderName
          zip -q -r $ModuleFolderName.zip *
          mv $GITHUB_WORKSPACE/$ModuleFolderName/$ModuleFolderName.zip "$GITHUB_WORKSPACE"/GithubRelease
          cd "$GITHUB_WORKSPACE"
          touch file.md
          echo "$ModuleFolderName.zip" > file.md
      - name: 3.上传到Github Release
        uses: ncipollo/release-action@main
        with:
          artifacts: ${{ github.workspace }}/GithubRelease/*
          name: "${{ env.ModuleFolderName }} ${{ env.version }}"
        # name后面的是Github Release的标题,可自行修改
        # tag若涉及version和versionCode,请按照${{ env.version }}这个格式来写
          tag: "${{ env.version }}"
          bodyFile: "${{ github.workspace }}/file.md"
          allowUpdates: true
          artifactErrorsFailBuild: true
          makeLatest: true
      - name: 4. 更新下载链接
        run: |
        # 请在引号内自行更新您的Github账号信息
          git config --global user.email "30484319+zjw2017@users.noreply.github.com"
        # 请在引号内自行更新您的Github账号信息
          git config --global user.name "柚稚的孩纸"
          sed -i '4d' $GITHUB_WORKSPACE/module.json
        # OWNER、REPO、version分别是用户名、仓库名、版本号,根据自身来修改
          browser_download_url=$(
            curl -L \
              -H "Accept: application/vnd.github+json" \
              -H "Authorization: Bearer ${{ github.token }}" \
              -H "X-GitHub-Api-Version: 2022-11-28" \
              "https://api.github.com/repos/OWNER/REPO/releases/tags/$version" | jq -r .assets[].browser_download_url | cut -d'"' -f2
          )
        # 作用是自动更新下载地址,因**大陆地区问题,添加了代理头(https://ghproxy.com/)
        # 如您的地区可以访问Github相关网站,可以删掉代理头,如
        # sed -i '3a "zipUrl": "'"$browser_download_url"'",' $GITHUB_WORKSPACE/module.json
          sed -i '3a "zipUrl": "https://ghproxy.com/'"$browser_download_url"'",' $GITHUB_WORKSPACE/module.json
          jq . $GITHUB_WORKSPACE/module.json > $GITHUB_WORKSPACE/new.json
          rm -rf $GITHUB_WORKSPACE/module.json && mv $GITHUB_WORKSPACE/new.json $GITHUB_WORKSPACE/module.json
          git add ./module.json
        # 引号内为提交信息,可根据需要自行修改
          if git commit -m "v$version"; then
              git push
          fi
  1. 修改module.md:文件名可自定义修改。模块的更新日志,语法为Markdown

  2. 修改module.json文件名需要.github/workflows/release.yml中第5行文件名一致。我们需要修改第2、3、5行。

    变量:类型

    • version:string
    • versionCode:int
    • changelog:url

补充说明:url为module.md链接,只需要填写一次即可。如果是**大陆地区,可在上一步中文件的链接前面加代理头(比如https://ghproxy.com)。如您的地区可以访问Github相关网站,可以删掉代理头

  1. 修改模块的module.prop以支持在线更新:格式如下。参数顺序可以打乱,但

    updateJson行下面的空行务必不能删除

id=<string>
name=<string>
author=<string>
description=<string>
updateJson=<url>

补充说明:url为module.json链接,只需要填写一次即可。如果是**大陆地区,可在上一步中文件的链接前面加代理头(比如https://ghproxy.com)。如您的地区可以访问Github相关网站,可以删掉代理头

  1. 替换模块文件夹中的META-INF

原因是支持在线更新的模块的META-INF会在刷入时被Magisk替换为默认的update-binary,所以请不要自定义/META-INF/com/google/android/update-binary文件。若您没有修改过此文件,此步骤可跳过

  1. 发起Action构建,完成发布

三、授予Workflow权限

打开项目页的Settings,点击左侧菜单栏中的Actions,点击展开菜单中的General,找到Workflow permissions,点击Read and write permissions,点击Workflow permissions下方的第一个Save按钮

四、了解项目机制

本项目利用了Github Actions,设计了两种触发方式:更新.json文件手动触发

当您完成代码提交和模块迭代后,就要在 .json文件 中配置版本号来告知您的用户有新版本,同时,您可以在 .md文件 中使用Markdown语法书写此次的更新日志。不同于系统更新,日志不会叠加。所以您的用户只会看到最新版本的更新日志(除非您更新时保留上次的日志)。

到此,模块的迭代、版本号的更替、更新日志的书写都已经完成,接下来的一切交给Github Actions

Github Actions做第一步就是读取 .json文件 中的版本号信息,将其输出到module.prop,这也是为什么前文的module.prop中为什么updateJson行下面的空行不能删除不需要书写版本号的奥秘。第二步,将模块文件压缩为zip格式。第三步,将模块文件上传Github Release。第四步,更新.json文件中的下载地址,并根据预留的Github账户信息将含有新版本链接的.json文件推送到您的仓库

做完了这些,您的用户就可以在Magisk模块选项卡中检测到新版本并安装到设备上。

五、结语

欢迎大家用来适配自己的模块,同时也期待能有专业人员共同改进本项目,感谢大家!

About

A magisk module for YoudaoDict

License:GNU General Public License v3.0


Languages

Language:Shell 100.0%