fix(mapper): unique build hash

This commit is contained in:
rhunk
2023-10-22 18:48:12 +02:00
parent 8aa2e57227
commit 920e3ef421
5 changed files with 16 additions and 20 deletions

View File

@ -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"))
}
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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())
}

View File

@ -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"