mirror of
https://github.com/ReVanced/revanced-library.git
synced 2026-01-17 16:33:56 +00:00
Compare commits
3 Commits
v3.1.1-dev
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0673307204 | ||
|
|
5df2bb81bf | ||
|
|
be0f6bf247 |
@@ -1,3 +1,10 @@
|
|||||||
|
# [3.2.0-dev.1](https://github.com/ReVanced/revanced-library/compare/v3.1.1-dev.1...v3.2.0-dev.1) (2025-05-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Request the update ownership enforcement ([#71](https://github.com/ReVanced/revanced-library/issues/71)) ([be0f6bf](https://github.com/ReVanced/revanced-library/commit/be0f6bf247461d16fbf649a9f2dc6facbb5b0c93))
|
||||||
|
|
||||||
## [3.1.1-dev.1](https://github.com/ReVanced/revanced-library/compare/v3.1.0...v3.1.1-dev.1) (2025-05-02)
|
## [3.1.1-dev.1](https://github.com/ReVanced/revanced-library/compare/v3.1.0...v3.1.1-dev.1) (2025-05-02)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -109,9 +109,9 @@ You can find the contribution guidelines [here](CONTRIBUTING.md).
|
|||||||
To build ReVanced Library,
|
To build ReVanced Library,
|
||||||
you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
|
you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
|
||||||
|
|
||||||
## 📜 Licence
|
## 📜 License
|
||||||
|
|
||||||
ReVanced Library is licensed under the GPLv3 license. Please see the [licence file](LICENSE) for more information.
|
ReVanced Library is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
|
||||||
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Library as long as you track changes/dates in source files.
|
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Library as long as you track changes/dates in source files.
|
||||||
Any modifications to ReVanced Library must also be made available under the GPL,
|
Any modifications to ReVanced Library must also be made available under the GPL,
|
||||||
along with build & install instructions.
|
along with build & install instructions.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
version = 3.1.1-dev.1
|
version = 3.2.0-dev.1
|
||||||
#Gradle
|
#Gradle
|
||||||
org.gradle.jvmargs = -Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options="-Xmx2048M"
|
org.gradle.jvmargs = -Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options="-Xmx2048M"
|
||||||
org.gradle.caching = true
|
org.gradle.caching = true
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ bcpkix-jdk18on = "1.77"
|
|||||||
binary-compatibility-validator = "0.15.1"
|
binary-compatibility-validator = "0.15.1"
|
||||||
core-ktx = "1.15.0"
|
core-ktx = "1.15.0"
|
||||||
guava = "33.2.1-jre"
|
guava = "33.2.1-jre"
|
||||||
jadb = "1.2.1"
|
jadb = "1.2.1.1"
|
||||||
kotlin = "2.0.20"
|
kotlin = "2.0.20"
|
||||||
kotlinx-coroutines = "1.8.1"
|
kotlinx-coroutines = "1.8.1"
|
||||||
kotlinx-serialization = "1.7.1"
|
kotlinx-serialization = "1.7.1"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import android.content.Intent
|
|||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.os.Build
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import app.revanced.library.installation.installer.Installer.Apk
|
import app.revanced.library.installation.installer.Installer.Apk
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
@@ -85,10 +86,13 @@ class LocalInstaller(
|
|||||||
|
|
||||||
override fun close() = context.unregisterReceiver(broadcastReceiver)
|
override fun close() = context.unregisterReceiver(broadcastReceiver)
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
companion object {
|
companion object {
|
||||||
private val sessionParams = PackageInstaller.SessionParams(
|
private val sessionParams = PackageInstaller.SessionParams(
|
||||||
PackageInstaller.SessionParams.MODE_FULL_INSTALL,
|
PackageInstaller.SessionParams.MODE_FULL_INSTALL,
|
||||||
).apply {
|
).apply {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
|
||||||
|
setRequestUpdateOwnership(true)
|
||||||
setInstallReason(PackageManager.INSTALL_REASON_USER)
|
setInstallReason(PackageManager.INSTALL_REASON_USER)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package app.revanced.library.installation.installer
|
package app.revanced.library.installation.installer
|
||||||
|
|
||||||
import app.revanced.library.installation.command.AdbShellCommandRunner
|
import app.revanced.library.installation.command.AdbShellCommandRunner
|
||||||
|
import app.revanced.library.installation.command.ShellCommandRunner
|
||||||
|
import app.revanced.library.installation.installer.Constants.GET_SDK_VERSION
|
||||||
import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
|
import app.revanced.library.installation.installer.Constants.INSTALLED_APK_PATH
|
||||||
import app.revanced.library.installation.installer.Installer.Apk
|
|
||||||
import se.vidstige.jadb.JadbException
|
import se.vidstige.jadb.JadbException
|
||||||
import se.vidstige.jadb.managers.Package
|
import se.vidstige.jadb.managers.Package
|
||||||
import se.vidstige.jadb.managers.PackageManager
|
import se.vidstige.jadb.managers.PackageManager
|
||||||
|
import se.vidstige.jadb.managers.PackageManager.UPDATE_OWNERSHIP
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [AdbInstaller] for installing and uninstalling [Apk] files using ADB.
|
* [AdbInstaller] for installing and uninstalling [Apk] files using ADB.
|
||||||
@@ -17,18 +19,23 @@ import se.vidstige.jadb.managers.PackageManager
|
|||||||
class AdbInstaller(
|
class AdbInstaller(
|
||||||
deviceSerial: String? = null,
|
deviceSerial: String? = null,
|
||||||
) : Installer<AdbInstallerResult, Installation>() {
|
) : Installer<AdbInstallerResult, Installation>() {
|
||||||
private val device = getDevice(deviceSerial, logger)
|
private val shellCommandRunner: ShellCommandRunner
|
||||||
private val adbShellCommandRunner = AdbShellCommandRunner(device)
|
private val packageManager: PackageManager
|
||||||
private val packageManager = PackageManager(device)
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
val device = getDevice(deviceSerial, logger)
|
||||||
|
shellCommandRunner = AdbShellCommandRunner(device)
|
||||||
|
packageManager = PackageManager(device)
|
||||||
|
|
||||||
logger.fine("Connected to $deviceSerial")
|
logger.fine("Connected to $deviceSerial")
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun install(apk: Apk): AdbInstallerResult {
|
override suspend fun install(apk: Apk): AdbInstallerResult {
|
||||||
logger.info("Installing ${apk.file.name}")
|
return runPackageManager {
|
||||||
|
val sdkVersion = shellCommandRunner(GET_SDK_VERSION).output.toInt()
|
||||||
return runPackageManager { install(apk.file) }
|
if (sdkVersion < 34) install(apk.file)
|
||||||
|
else installWithOptions(apk.file, listOf(UPDATE_OWNERSHIP))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun uninstall(packageName: String): AdbInstallerResult {
|
override suspend fun uninstall(packageName: String): AdbInstallerResult {
|
||||||
@@ -39,7 +46,7 @@ class AdbInstaller(
|
|||||||
|
|
||||||
override suspend fun getInstallation(packageName: String): Installation? = packageManager.packages.find {
|
override suspend fun getInstallation(packageName: String): Installation? = packageManager.packages.find {
|
||||||
it.toString() == packageName
|
it.toString() == packageName
|
||||||
}?.let { Installation(adbShellCommandRunner(INSTALLED_APK_PATH).output) }
|
}?.let { Installation(shellCommandRunner(INSTALLED_APK_PATH).output) }
|
||||||
|
|
||||||
private fun runPackageManager(block: PackageManager.() -> Unit) = try {
|
private fun runPackageManager(block: PackageManager.() -> Unit) = try {
|
||||||
packageManager.run(block)
|
packageManager.run(block)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ internal object Constants {
|
|||||||
const val KILL = "am force-stop $PLACEHOLDER"
|
const val KILL = "am force-stop $PLACEHOLDER"
|
||||||
const val INSTALLED_APK_PATH = "pm path $PLACEHOLDER"
|
const val INSTALLED_APK_PATH = "pm path $PLACEHOLDER"
|
||||||
const val CREATE_INSTALLATION_PATH = "$CREATE_DIR $MOUNT_PATH"
|
const val CREATE_INSTALLATION_PATH = "$CREATE_DIR $MOUNT_PATH"
|
||||||
|
const val GET_SDK_VERSION = "getprop ro.build.version.sdk"
|
||||||
|
|
||||||
const val MOUNT_APK =
|
const val MOUNT_APK =
|
||||||
"base_path=\"$MOUNTED_APK_PATH\" && " +
|
"base_path=\"$MOUNTED_APK_PATH\" && " +
|
||||||
|
|||||||
Reference in New Issue
Block a user