commit 920e3ef4218863cffa0bbe11eb93c8b586b50dd4
parent 8aa2e572272d1fe40605bcfaa2624904a2b0d0cd
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sun, 22 Oct 2023 18:48:12 +0200
fix(mapper): unique build hash
Diffstat:
5 files changed, 16 insertions(+), 20 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
@@ -112,7 +112,7 @@ android {
androidComponents {
onVariants(selector().withFlavor("abi", "core")) {
it.packaging.jniLibs.apply {
- pickFirsts.set(listOf("**/lib${rootProject.ext["nativeName"]}.so"))
+ pickFirsts.set(listOf("**/lib${rootProject.ext["buildHash"]}.so"))
excludes.set(listOf("**/*.so"))
}
}
diff --git a/build.gradle.kts b/build.gradle.kts
@@ -11,7 +11,7 @@ var versionCode = 1 //"1" for now until stable release
rootProject.ext.set("appVersionName", versionName)
rootProject.ext.set("appVersionCode", versionCode)
rootProject.ext.set("applicationId", "me.rhunk.snapenhance")
-rootProject.ext.set("nativeName", properties["custom_native_name"] ?: java.security.SecureRandom().nextLong(1000000000, 99999999999).toString(16))
+rootProject.ext.set("buildHash", properties["custom_build_hash"] ?: java.security.SecureRandom().nextLong(1000000000, 99999999999).toString(16))
tasks.register("getVersion") {
doLast {
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
@@ -18,6 +18,7 @@ android {
buildConfigField("int", "VERSION_CODE", "${rootProject.ext["appVersionCode"]}")
buildConfigField("String", "APPLICATION_ID", "\"${rootProject.ext["applicationId"]}\"")
buildConfigField("int", "BUILD_DATE", "${System.currentTimeMillis() / 1000}")
+ buildConfigField("String", "BUILD_HASH", "\"${rootProject.ext["buildHash"]}\"")
}
kotlinOptions {
diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MappingsWrapper.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/MappingsWrapper.kt
@@ -4,6 +4,7 @@ import android.content.Context
import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
import com.google.gson.JsonParser
+import me.rhunk.snapenhance.common.BuildConfig
import me.rhunk.snapenhance.common.Constants
import me.rhunk.snapenhance.common.bridge.FileLoaderWrapper
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
@@ -35,11 +36,13 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
private lateinit var context: Context
private val mappings = ConcurrentHashMap<String, Any>()
- private var snapBuildNumber: Long = 0
+ private var mappingUniqueHash: Long = 0
+
+ private fun getUniqueBuildId() = (getSnapchatPackageInfo()?.longVersionCode ?: -1) xor BuildConfig.BUILD_HASH.hashCode().toLong()
fun init(context: Context) {
this.context = context
- snapBuildNumber = getSnapchatVersionCode()
+ mappingUniqueHash = getUniqueBuildId()
if (isFileExists()) {
runCatching {
@@ -57,24 +60,16 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
)
}.getOrNull()
- fun getSnapchatVersionCode() = getSnapchatPackageInfo()?.longVersionCode ?: -1
- fun getApplicationSourceDir() = getSnapchatPackageInfo()?.applicationInfo?.sourceDir
- fun getGeneratedBuildNumber() = snapBuildNumber
-
- fun isMappingsOutdated(): Boolean {
- return snapBuildNumber != getSnapchatVersionCode() || isMappingsLoaded().not()
- }
-
- fun isMappingsLoaded(): Boolean {
- return mappings.isNotEmpty()
- }
+ fun getGeneratedBuildNumber() = mappingUniqueHash
+ fun isMappingsOutdated() = mappingUniqueHash != getUniqueBuildId() || isMappingsLoaded().not()
+ fun isMappingsLoaded() = mappings.isNotEmpty()
private fun loadCached() {
if (!isFileExists()) {
throw Exception("Mappings file does not exist")
}
val mappingsObject = JsonParser.parseString(read().toString(Charsets.UTF_8)).asJsonObject.also {
- snapBuildNumber = it["snap_build_number"].asLong
+ mappingUniqueHash = it["unique_hash"].asLong
}
mappingsObject.entrySet().forEach { (key, value): Map.Entry<String, JsonElement> ->
@@ -91,18 +86,18 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
}
fun refresh() {
- snapBuildNumber = getSnapchatVersionCode()
+ mappingUniqueHash = getUniqueBuildId()
val mapper = Mapper(*mappers)
runCatching {
- mapper.loadApk(getApplicationSourceDir() ?: throw Exception("Failed to get APK"))
+ mapper.loadApk(getSnapchatPackageInfo()?.applicationInfo?.sourceDir ?: throw Exception("Failed to get APK"))
}.onFailure {
throw Exception("Failed to load APK", it)
}
measureTimeMillis {
val result = mapper.start().apply {
- addProperty("snap_build_number", snapBuildNumber)
+ addProperty("unique_hash", mappingUniqueHash)
}
write(result.toString().toByteArray())
}
diff --git a/native/build.gradle.kts b/native/build.gradle.kts
@@ -3,7 +3,7 @@ plugins {
alias(libs.plugins.kotlinAndroid)
}
-val nativeName = rootProject.ext.get("nativeName")
+val nativeName = rootProject.ext.get("buildHash")
android {
namespace = rootProject.ext["applicationId"].toString() + ".nativelib"