Mapbox: Add version stamp file to cached native library

Fixes #1321
This commit is contained in:
Marvin W 2020-12-21 20:32:44 +01:00
parent 85e06675f3
commit f20d966f1b
No known key found for this signature in database
GPG Key ID: 072E9235DB996F2A
2 changed files with 10 additions and 3 deletions

View File

@ -20,6 +20,7 @@ apply plugin: 'kotlin-android-extensions'
dependencies {
implementation project(':play-services-api')
implementation project(':play-services-base-core')
implementation("com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1") {
exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-accounts'
}

View File

@ -21,6 +21,8 @@ import android.content.Context
import android.content.pm.ApplicationInfo
import android.util.Log
import com.mapbox.mapboxsdk.LibraryLoader
import org.microg.gms.common.Constants
import org.microg.gms.common.PackageUtils
import java.io.*
import java.util.zip.ZipFile
@ -36,9 +38,12 @@ class MultiArchLoader(private val mapContext: Context, private val appContext: C
if (primaryCpuAbi != null) {
val path = "lib/$primaryCpuAbi/lib$name.so"
val cacheFile = File("${appContext.cacheDir.absolutePath}/.gmscore/$path")
cacheFile.parentFile.mkdirs()
cacheFile.parentFile?.mkdirs()
val cacheFileStamp = File("${appContext.cacheDir.absolutePath}/.gmscore/$path.stamp")
val cacheVersion = kotlin.runCatching { cacheFileStamp.readText().toInt() }.getOrNull()
val mapVersion = PackageUtils.versionCode(mapContext, Constants.GMS_PACKAGE_NAME)
val apkFile = File(mapContext.packageCodePath)
if (!cacheFile.exists() || cacheFile.lastModified() < apkFile.lastModified()) {
if (!cacheFile.exists() || cacheVersion == null || cacheVersion != mapVersion) {
val zipFile = ZipFile(apkFile)
val entry = zipFile.getEntry(path)
if (entry != null) {
@ -46,6 +51,7 @@ class MultiArchLoader(private val mapContext: Context, private val appContext: C
} else {
Log.d(TAG, "Can't load native library: $path does not exist in $apkFile")
}
cacheFileStamp.writeText(mapVersion.toString())
}
Log.d(TAG, "Loading $name from ${cacheFile.getPath()}")
System.load(cacheFile.absolutePath)