Implementing installation of dependent libraries before installing the main package

This commit is contained in:
Evengard
2023-05-31 12:26:47 +00:00
committed by Aayush Gupta
parent 574390e89f
commit dbc12d7445
3 changed files with 40 additions and 1 deletions

View File

@@ -171,7 +171,7 @@ dependencies {
implementation "com.github.topjohnwu.libsu:core:5.0.5" implementation "com.github.topjohnwu.libsu:core:5.0.5"
//Love <3 //Love <3
implementation "com.gitlab.AuroraOSS:gplayapi:3.1.2" implementation "com.gitlab.AuroraOSS:gplayapi:3.1.3"
//Browser //Browser
implementation 'androidx.browser:browser:1.5.0' implementation 'androidx.browser:browser:1.5.0'

View File

@@ -9,6 +9,7 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleService import androidx.lifecycle.LifecycleService
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.aurora.Constants import com.aurora.Constants
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.stackTraceToString import com.aurora.extensions.stackTraceToString
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.AuthData
@@ -24,6 +25,7 @@ import com.aurora.store.data.model.UpdateFile
import com.aurora.store.data.network.HttpClient import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.util.Log import com.aurora.store.util.Log
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
import com.tonyodev.fetch2.* import com.tonyodev.fetch2.*
import com.tonyodev.fetch2core.DownloadBlock import com.tonyodev.fetch2core.DownloadBlock
import com.tonyodev.fetch2core.FetchObserver import com.tonyodev.fetch2core.FetchObserver
@@ -481,6 +483,19 @@ class UpdateService: LifecycleService() {
app.offerType app.offerType
) )
if (app.dependencies.dependentLibraries.isNotEmpty() && isOAndAbove()) {
app.dependencies.dependentLibraries.forEach {
if (!isSharedLibraryInstalled(this, it.packageName, it.versionCode)) {
updateApp(it, removeExisiting)
while (containsInInstalling(it.packageName) ||
!isSharedLibraryInstalled(this, it.packageName, it.versionCode)
) {
Thread.sleep(1000)
}
}
}
}
files.filter { it.url.isNotEmpty() } files.filter { it.url.isNotEmpty() }
.map { RequestBuilder.buildRequest(this, app, it) } .map { RequestBuilder.buildRequest(this, app, it) }
.toList() .toList()

View File

@@ -25,10 +25,13 @@ import android.content.IntentFilter
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.PackageManager.PackageInfoFlags import android.content.pm.PackageManager.PackageInfoFlags
import android.content.pm.SharedLibraryInfo
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build import android.os.Build
import androidx.core.content.pm.PackageInfoCompat import androidx.core.content.pm.PackageInfoCompat
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isTAndAbove import com.aurora.extensions.isTAndAbove
import okhttp3.internal.immutableListOf
object PackageUtil { object PackageUtil {
@@ -51,6 +54,17 @@ object PackageUtil {
} }
} }
fun isSharedLibraryInstalled(context: Context, packageName: String, versionCode: Int): Boolean {
if (isOAndAbove()) {
val sharedLibraries = getAllSharedLibraries(context)
return sharedLibraries.any {
it.name == packageName && it.version == versionCode
}
} else {
return false
}
}
fun isUpdatable(context: Context, packageName: String, versionCode: Long): Boolean { fun isUpdatable(context: Context, packageName: String, versionCode: Long): Boolean {
return try { return try {
val packageInfo = getPackageInfo(context, packageName) val packageInfo = getPackageInfo(context, packageName)
@@ -106,6 +120,16 @@ object PackageUtil {
} }
} }
private fun getAllSharedLibraries(context: Context, flags: Int = 0): List<SharedLibraryInfo> {
return if (isTAndAbove()) {
context.packageManager.getSharedLibraries(PackageInfoFlags.of(flags.toLong()))
} else if (isOAndAbove()) {
context.packageManager.getSharedLibraries(flags)
} else {
emptyList()
}
}
fun getAllPackages(context: Context): List<PackageInfo> { fun getAllPackages(context: Context): List<PackageInfo> {
val packageInfoSet: MutableList<PackageInfo> = mutableListOf() val packageInfoSet: MutableList<PackageInfo> = mutableListOf()
val packageManager: PackageManager = context.packageManager val packageManager: PackageManager = context.packageManager