diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32e749ea..1c34c670 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -252,7 +252,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: one-kvm-android-apk - path: target/android/*.apk + path: target/android/one-kvm_*.apk if-no-files-found: error retention-days: 7 diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 8c056d5c..44af35d1 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -39,6 +39,11 @@ val androidBuildProfile = providers.environmentVariable("ONE_KVM_ANDROID_PROFILE .orElse("debug") .get() .lowercase() +val oneKvmVersion = Regex("""(?m)^version\s*=\s*"([^"]+)"""") + .find(rootCrateDir.file("Cargo.toml").asFile.readText()) + ?.groupValues + ?.get(1) + ?: throw GradleException("Failed to resolve version from root Cargo.toml") val androidFfmpegSourceDir = rootProject.layout.projectDirectory .dir("../.tmp/android-ffmpeg-check/src/ffmpeg-rockchip") val localProperties = Properties().apply { @@ -163,7 +168,7 @@ android { minSdk = androidApiLevel targetSdk = 36 versionCode = 1 - versionName = "0.1.0" + versionName = oneKvmVersion } productFlavors { diff --git a/build/build-android.sh b/build/build-android.sh index 68bd75ac..9590253e 100644 --- a/build/build-android.sh +++ b/build/build-android.sh @@ -108,7 +108,7 @@ Environment: ONE_KVM_ANDROID_SKIP_DOCKER_BUILD=1 Reuse an already loaded Docker image APK output: - target/android/ + target/android/one-kvm__.apk EOF ;; *) diff --git a/build/cross/Dockerfile.android b/build/cross/Dockerfile.android index b222f56d..7f3cd378 100644 --- a/build/cross/Dockerfile.android +++ b/build/cross/Dockerfile.android @@ -151,7 +151,7 @@ RUN printf '%s\n' \ ' help Show this help.' \ '' \ 'APK output:' \ - ' target/android/' \ + ' target/android/one-kvm__.apk' \ 'EOF' \ '}' \ '' \ @@ -160,6 +160,13 @@ RUN printf '%s\n' \ ' exit 1' \ '}' \ '' \ + 'read_project_version() {' \ + ' local version' \ + ' version="$(awk -F "\"" '"'"'/^version[[:space:]]*=/ { print $2; exit }'"'"' "$PROJECT_ROOT/Cargo.toml")"' \ + ' [[ -n "$version" ]] || fail "Failed to resolve version from $PROJECT_ROOT/Cargo.toml"' \ + ' printf "%s\n" "$version"' \ + '}' \ + '' \ 'copy_apks() {' \ ' local flavor="$1"' \ ' local src_dir="$ANDROID_DIR/app/build/outputs/apk/$flavor/$BUILD_TYPE"' \ @@ -167,7 +174,7 @@ RUN printf '%s\n' \ ' mkdir -p "$OUTPUT_DIR"' \ ' for apk in "$src_dir"/*.apk; do' \ ' [[ -f "$apk" ]] || continue' \ - ' sign_apk "$apk" "$OUTPUT_DIR/$(basename "${apk/-unsigned.apk/.apk}")"' \ + ' sign_apk "$apk" "$OUTPUT_DIR/one-kvm_${PROJECT_VERSION}_${flavor}.apk"' \ ' found=1' \ ' done' \ ' [[ "$found" == "1" ]] || fail "No APK files found in: $src_dir"' \ @@ -257,6 +264,7 @@ RUN printf '%s\n' \ '' \ 'printf "sdk.dir=%s\n" "$ANDROID_HOME" > "$ANDROID_DIR/local.properties"' \ 'mkdir -p "$OUTPUT_DIR"' \ + 'PROJECT_VERSION="$(read_project_version)"' \ '' \ 'export ONE_KVM_ANDROID_PROFILE="$BUILD_TYPE"' \ 'export ONE_KVM_ANDROID_ABIS="$ANDROID_ABIS"' \ @@ -269,6 +277,7 @@ RUN printf '%s\n' \ 'echo "Building Android APK"' \ 'echo " task: $GRADLE_TASK"' \ 'echo " profile: $ONE_KVM_ANDROID_PROFILE"' \ + 'echo " version: $PROJECT_VERSION"' \ 'echo " abis: $ONE_KVM_ANDROID_ABIS"' \ 'echo " output: $OUTPUT_DIR"' \ 'echo " sdk: $ANDROID_HOME"' \