diff --git a/.github/workflows/debug.yml b/.github/workflows/debug.yml index bf61b74a..ba6ee77d 100644 --- a/.github/workflows/debug.yml +++ b/.github/workflows/debug.yml @@ -311,4 +311,20 @@ jobs: echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties ./run update_assets - ./gradlew app:assembleOssDebug \ No newline at end of file + ./gradlew app:assembleOssDebug + - uses: actions/upload-artifact@v2 + with: + name: "SHA256-ARM ${{ env.SHA256_ARM }}" + path: ${{ env.SUM_ARM }} + - uses: actions/upload-artifact@v2 + with: + name: "SHA256-ARM64 ${{ env.SHA256_ARM64 }}" + path: ${{ env.SUM_ARM64 }} + - uses: actions/upload-artifact@v2 + with: + name: "SHA256-X64 ${{ env.SHA256_X64 }}" + path: ${{ env.SUM_X64 }} + - uses: actions/upload-artifact@v2 + with: + name: "SHA256-X86 ${{ env.SHA256_X86 }}" + path: ${{ env.SUM_X86 }} \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 1ebd29d3..969449a6 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -12,5 +12,6 @@ dependencies { implementation("com.android.tools.build:gradle-api:$androidPluginVersion") implementation(kotlin("gradle-plugin", kotlinVersion)) implementation(kotlin("stdlib")) + implementation("cn.hutool:hutool-crypto:5.6.5") implementation("com.github.triplet.gradle:play-publisher:$playPublisherVersion") } diff --git a/buildSrc/src/main/kotlin/Helpers.kt b/buildSrc/src/main/kotlin/Helpers.kt index 926229a9..3049e35c 100644 --- a/buildSrc/src/main/kotlin/Helpers.kt +++ b/buildSrc/src/main/kotlin/Helpers.kt @@ -1,3 +1,4 @@ +import cn.hutool.crypto.digest.DigestUtil import com.android.build.gradle.AbstractAppExtension import com.android.build.gradle.BaseExtension import com.android.build.gradle.internal.api.BaseVariantOutputImpl @@ -10,6 +11,7 @@ import org.gradle.api.plugins.ExtensionAware import org.gradle.api.tasks.Exec import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions +import java.io.File import java.util.* private val Project.android get() = extensions.getByName("android") @@ -17,6 +19,21 @@ private val Project.android get() = extensions.getByName("android private val javaVersion = JavaVersion.VERSION_1_8 private lateinit var metadata: Properties private lateinit var localProperties: Properties +private lateinit var flavor: String + +fun Project.requireFlavor(): String { + if (::flavor.isInitialized) return flavor + if (gradle.startParameter.taskNames.isNotEmpty()) { + val taskName = gradle.startParameter.taskNames[0] + if (taskName.contains("assemble")) { + flavor = taskName.substringAfter("assemble") + return flavor + } + } + + flavor = "" + return flavor +} fun Project.requireMetadata(): Properties { if (!::metadata.isInitialized) { @@ -188,6 +205,49 @@ fun Project.setupAppCommon() { getByName("debug").signingConfig = key } + (this as? AbstractAppExtension)?.apply { + tasks.register("calculateAPKsSha256") { + val githubEnv = File(System.getenv("GITHUB_ENV") ?: "this-file-does-not-exist") + + doLast { + applicationVariants.all { + if (name.equals(requireFlavor(), ignoreCase = true)) outputs.all { + if (outputFile.isFile) { + val sha256 = DigestUtil.sha256Hex(outputFile) + val sum = File( + outputFile.parentFile, + outputFile.nameWithoutExtension + ".sha256sum.txt" + ) + sum.writeText(sha256) + if (githubEnv.isFile) when { + outputFile.name.contains("-arm64") -> { + githubEnv.appendText("SUM_ARM64=${sum.absolutePath}\n") + githubEnv.appendText("SHA256_ARM64=$sha256\n") + } + outputFile.name.contains("-armeabi") -> { + githubEnv.appendText("SUM_ARM=${sum.absolutePath}\n") + githubEnv.appendText("SHA256_ARM=$sha256\n") + } + outputFile.name.contains("-x86_64") -> { + githubEnv.appendText("SUM_X64=${sum.absolutePath}\n") + githubEnv.appendText("SHA256_X64=$sha256\n") + } + outputFile.name.contains("-x86") -> { + githubEnv.appendText("SUM_X86=${sum.absolutePath}\n") + githubEnv.appendText("SHA256_X86=$sha256\n") + } + } + } + } + } + } + dependsOn("package${requireFlavor()}") + } + val assemble = "assemble${requireFlavor()}" + tasks.whenTaskAdded { + if (name == assemble) dependsOn("calculateAPKsSha256") + } + } } } @@ -291,6 +351,7 @@ fun Project.setupPlugin(projectName: String) { } applicationVariants.all { + outputs.all { this as BaseVariantOutputImpl outputFileName = outputFileName