diff --git a/.github/workflows/Weekly_Build.yml b/.github/workflows/Weekly_Build.yml
index 697d4109..c07274d4 100644
--- a/.github/workflows/Weekly_Build.yml
+++ b/.github/workflows/Weekly_Build.yml
@@ -23,7 +23,7 @@ jobs:
- name: Delete Weekly Build
uses: Mattraks/delete-workflow-runs@v2
with:
- token: ${{ github.token }}
+ token: ${{ secrets.TOKEN }}
repository: ${{ github.repository }}
retain_days: 0 # 全部删除只留正在跑的一条
keep_minimum_runs: 0 # 全部删除只留正在跑的一条
@@ -45,39 +45,84 @@ jobs:
# 打包release
- name: Build with Gradle
run: bash ./gradlew assembleRelease
- # 存档打包的文件,以便后续上传,TODO: 看起来有点笨,有没有更好的方法?
- - name: Init APP Version Name
+ # 自动发布预览计划
+ - name: Parse output-metadata.json and upload APKs to XUpdate
run: |
- echo "ver_name=$(grep -m 1 '\"versionName\":' ${{ env.output }}//output-metadata.json | grep -oP '\"versionName\": \"\K[^\"]+')" >> $GITHUB_ENV
- echo "ver_code=$(grep -m 1 '\"versionCode\":' ${{ env.output }}//output-metadata.json | grep -oP '\"versionCode\": \K\d+' | tail -c 4)" >> $GITHUB_ENV
- echo "ver_date=$(grep -m 1 '\"outputFile\":' ${{ env.output }}//output-metadata.json | grep -oP '\"outputFile\": \"[^\"]+' | grep -oP '\d{8}')" >> $GITHUB_ENV
+ metadata_file="${{ env.output }}/output-metadata.json"
+ applicationId=$(jq -r '.applicationId' "$metadata_file")
+ buildDate=$(jq -r '.buildDate' "$metadata_file")
+ buildTime=$(jq -r '.buildTime' "$metadata_file")
+ gitCommitId=$(jq -r '.gitCommitId' "$metadata_file")
+
+ # 遍历 elements,并从 outputFile 中提取 versionName 和 versionCode
+ jq -r '.elements | sort_by(.outputFile) | .[].outputFile' "$metadata_file" |
+ while IFS= read -r apk; do
+ echo "APK: $apk"
+ # 使用正则表达式从文件名中提取 versionName、versionCode 和 ABI
+ if [[ $apk =~ SmsF_([^_]+)_([^_]+)_(.+)_release.apk ]]; then
+ versionName="${BASH_REMATCH[1]}"
+ versionCode="${BASH_REMATCH[2]}"
+ abi="${BASH_REMATCH[3]}"
+ echo "ver_name=$versionName" >> $GITHUB_ENV
+ echo "ver_code=${versionCode: -3}" >> $GITHUB_ENV
+
+ response=$(curl --retry 3 -X POST -H "Cache-Control: no-cache" \
+ -H "Content-Type: application/json" \
+ -H "Cookie: xupdate_token=${{ secrets.XUPDATE_TOKEN }}" \
+ -H "X-Token: ${{ secrets.X_TOKEN }}" \
+ -d "{\"appKey\":\"${applicationId}\",\"versionName\":\"${versionName}\",\"versionCode\":\"${versionCode}\",\"modifyContent\":\"\",\"updateStatus\":1,\"gitCommitId\":\"${gitCommitId}\",\"buildTime\":\"${buildTime}\",\"uploadTime\":\"${buildTime}\"}" \
+ ${{ secrets.URL_ADD_VERSION }})
+
+ version_id=$(echo $response | grep -oP '"versionId":\s*\K\d+') # 提取versionId
+ echo "versionId: $version_id"
+
+ if [[ $version_id =~ ^[0-9]+$ ]]; then
+ curl --retry 3 -X POST -H "Cache-Control: no-cache" \
+ -H "Content-Type: multipart/form-data" \
+ -H "Cookie: xupdate_token=${{ secrets.XUPDATE_TOKEN }}" \
+ -H "X-Token: ${{ secrets.X_TOKEN }}" \
+ -F "file=@${{ env.output }}/${apk};filename=${apk}" \
+ -F "versionId=${version_id}" \
+ ${{ secrets.URL_UPLOAD_APK }}
+
+ # If upload is successful, set success to true to exit the retry loop
+ if [[ $? -eq 0 ]]; then
+ success=true
+ fi
+ else
+ echo "Error: version_id is not a valid number. skip upload apk"
+ fi
+
+ fi
+ done
+ # 存档打包的文件,以便后续上传,TODO: 看起来有点笨,有没有更好的方法?
- name: Upload App To Artifact universal
if: success () || failure ()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: "SmsF_${{ env.ver_name }}_100${{ env.ver_code }}_universal_${{ env.ver_date }}_release.apk"
- path: "${{ env.output }}//SmsF_*_universal_*.apk"
+ name: "SmsF_${{ env.ver_name }}_100${{ env.ver_code }}_universal_release.apk"
+ path: "${{ env.output }}/SmsF_*_universal_*.apk"
- name: Upload App To Artifact armeabi-v7a
if: success () || failure ()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: "SmsF_${{ env.ver_name }}_200${{ env.ver_code }}_armeabi-v7a_${{ env.ver_date }}_release.apk"
+ name: "SmsF_${{ env.ver_name }}_200${{ env.ver_code }}_armeabi-v7a_release.apk"
path: "${{ env.output }}//SmsF_*_armeabi-v7a_*.apk"
- name: Upload App To Artifact arm64-v8a
if: success () || failure ()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: "SmsF_${{ env.ver_name }}_300${{ env.ver_code }}_arm64-v8a_${{ env.ver_date }}_release.apk"
+ name: "SmsF_${{ env.ver_name }}_300${{ env.ver_code }}_arm64-v8a_release.apk"
path: "${{ env.output }}//SmsF_*_arm64-v8a_*.apk"
- name: Upload App To Artifact x86
if: success () || failure ()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: "SmsF_${{ env.ver_name }}_400${{ env.ver_code }}_x86_${{ env.ver_date }}_release.apk"
- path: "${{ env.output }}//SmsF_*_x86_${{ env.ver_date }}_*.apk"
+ name: "SmsF_${{ env.ver_name }}_400${{ env.ver_code }}_x86_release.apk"
+ path: "${{ env.output }}//SmsF_*_x86_*.apk"
- name: Upload App To Artifact x86_64
if: success () || failure ()
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: "SmsF_${{ env.ver_name }}_500${{ env.ver_code }}_x86_64_${{ env.ver_date }}_release.apk"
- path: "${{ env.output }}//SmsF_*_x86_64_${{ env.ver_date }}_*.apk"
+ name: "SmsF_${{ env.ver_name }}_500${{ env.ver_code }}_x86_64_release.apk"
+ path: "${{ env.output }}//SmsF_*_x86_64_*.apk"
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c8700395..45f8dd83 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,8 @@
//file:noinspection GrDeprecatedAPIUsage
//file:noinspection DependencyNotationArgument
+import groovy.json.JsonBuilder
+import groovy.json.JsonSlurper
+
plugins {
id 'com.android.application'
id 'kotlin-android'
@@ -34,20 +37,22 @@ android {
viewBinding true
}
+ //编译日期
+ def buildDate = new Date().format("yyMMdd", TimeZone.getTimeZone("GMT+08"))
+ //编译时间
+ def buildTime = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+08"))
+ //Git 的 Commit ID
+ def gitCommitId = getGitCommitId()
+
defaultConfig {
applicationId "com.idormy.sms.forwarder"
minSdkVersion build_versions.min_sdk
targetSdkVersion build_versions.target_sdk
versionCode build_versions.version_code
- //版本号拼接编译日期
- def date = new Date().format("yyMMdd", TimeZone.getTimeZone("GMT+08"))
- versionName = "${build_versions.version_name}.${date}"
+ versionName = "${build_versions.version_name}.${buildDate}"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- //编译时间
- def time = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+08"))
- buildConfigField "String", "BUILD_TIME", "\"${time}\""
- //Git 的 commit ID
- buildConfigField "String", "GIT_COMMIT_ID", getGitCommitId()
+ buildConfigField "String", "BUILD_TIME", "\"${buildTime}\""
+ buildConfigField "String", "GIT_COMMIT_ID", "\"${gitCommitId}\""
multiDexEnabled true
//vectorDrawables.useSupportLibrary = true
@@ -171,11 +176,20 @@ android {
android.applicationVariants.configureEach { variant ->
// Assigns a different version code for each output APK.
variant.outputs.each { output ->
- //noinspection GrDeprecatedAPIUsage
def abiName = output.getFilter(com.android.build.OutputFile.ABI)
if (abiName == null) abiName = "universal"
output.versionCodeOverride = abiCodes.get(abiName, 0) * 100000 + variant.versionCode
output.outputFileName = "SmsF_${versionName}_${output.versionCode}_${abiName}_${variant.name}.apk"
+
+ // 修改 output-metadata.json 追加编译日期、编译时间、Git Commit ID
+ variant.assemble.doLast {
+ def metadataFile = file("${variant.outputs[0].outputFile.parent}/output-metadata.json")
+ def metadata = new JsonSlurper().parseText(metadataFile.text)
+ metadata.buildDate = buildDate
+ metadata.buildTime = buildTime
+ metadata.gitCommitId = gitCommitId
+ metadataFile.text = new JsonBuilder(metadata).toPrettyString()
+ }
}
}
@@ -327,10 +341,9 @@ apply from: 'x-library.gradle'
//获取 commit ID
static def getGitCommitId() {
try {
- def commitId = 'git rev-parse --short HEAD'.execute().text.trim()
- return "\"$commitId\""
+ return 'git rev-parse --short HEAD'.execute().text.trim()
} catch (Exception e) {
e.printStackTrace()
- return "\"\""
+ return ""
}
}
\ No newline at end of file
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 8ecfa312..9355196c 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -42,10 +42,10 @@
About
AppVer: %s
- Version Name: %s\nVersion Code: %s\nBuild Time: %s\nGit Commit ID: %s
+ Version Name: %s\nVersion Code: %s\nBuild Time: %s\nGit Commit ID: %s
Cache Size: %s
FrpcVer: %s
- WeChat MiniProgram
+ WeChat MiniProgram
Cache cleared
Frpc Deleted, App restarting
© %1$s PPPSCN All rights reserved.
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index d116c1a9..84c9b729 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -42,10 +42,10 @@
关于软件
软件版本:%s
- 版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s
+ 版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s
缓存大小:%s
Frpc版本:%s
- 微信小程序
+ 微信小程序
已清理缓存
已删除动态库,重启APP以便生效!
© %1$s PPPSCN All rights reserved.
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index f86051c1..b26e182d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -42,10 +42,10 @@
關於軟體
軟體版本:%s
- 版本名稱:%s\n版本代碼:%s\n構建時間:%s\nGit提交ID:%s
+ 版本名稱:%s\n版本代碼:%s\n構建時間:%s\nGit提交ID:%s
緩存大小:%s
Frpc版本:%s
- 微信小程序
+ 微信小程序
已清理緩存
已刪除動態庫,重啟應用以生效!
© %1$s PPPSCN 版權所有。
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a57e37ab..2ec8e15c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -42,10 +42,10 @@
关于软件
软件版本:%s
- 版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s
+ 版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s
缓存大小:%s
Frpc版本:%s
- 微信小程序
+ 微信小程序
已清理缓存
已删除动态库,重启APP以便生效!
© %1$s PPPSCN All rights reserved.