Skip to content

Commit

Permalink
feat: Implement killPackage()
Browse files Browse the repository at this point in the history
Change-Id: I00d8d6d275f90b4c15270700b01c3370e2f1f4e0
  • Loading branch information
XayahSuSuSu committed Dec 7, 2023
1 parent a02a59a commit b8fc1c7
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.xayah.core.util.DateUtil
import com.xayah.core.util.GsonUtil
import com.xayah.core.util.NotificationUtil
import com.xayah.core.util.PathUtil
import com.xayah.core.util.command.BaseUtil
import com.xayah.core.util.command.PreparationUtil
import com.xayah.core.util.command.Rclone
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -140,6 +141,10 @@ internal class BackupServiceImpl : Service() {
packages.forEach { currentPackage ->
log { "Current package: ${currentPackage.packageName}, apk: ${currentPackage.apkSelected}, data: ${currentPackage.dataSelected}." }

// Kill the package.
log { "Trying to kill ${currentPackage.packageName}." }
BaseUtil.killPackage(currentPackage.packageName)

val packageBackupOperation = PackageBackupOperation(
packageName = currentPackage.packageName,
timestamp = timestamp,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.xayah.core.service.util.upsertUserDe
import com.xayah.core.util.DateUtil
import com.xayah.core.util.NotificationUtil
import com.xayah.core.util.PathUtil
import com.xayah.core.util.command.BaseUtil
import com.xayah.core.util.command.PreparationUtil
import com.xayah.core.util.localBackupSaveDir
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -121,6 +122,10 @@ internal class BackupServiceImpl : Service() {
packages.forEach { currentPackage ->
log { "Current package: ${currentPackage.packageName}, apk: ${currentPackage.apkSelected}, data: ${currentPackage.dataSelected}." }

// Kill the package.
log { "Trying to kill ${currentPackage.packageName}." }
BaseUtil.killPackage(currentPackage.packageName)

val packageBackupOperation = PackageBackupOperation(
packageName = currentPackage.packageName,
timestamp = timestamp,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ import com.xayah.core.util.filesDir
import com.xayah.core.util.logDir
import com.xayah.core.util.model.ShellResult
import com.xayah.core.util.withIOContext
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import net.lingala.zip4j.ZipFile
import java.io.ByteArrayOutputStream
import java.io.File
Expand Down Expand Up @@ -106,6 +109,45 @@ object BaseUtil {
)
}

suspend fun killPackage(packageName: String) = runBlocking {
launch {
withTimeout(10000) {
var processesCount = 1

while (processesCount != 0) {
// ps -A | grep -w "$packageName"
execute(
"ps",
"-A",
"|",
"grep",
"-w",
"$QUOTE$packageName$QUOTE",
).also { result ->
if (result.isSuccess) {
// There are still processes left.
processesCount = result.out.size

// killall -9 "$packageName" && am force-stop "$packageName" && am kill "$packageName"
execute(
"killall -9",
"$QUOTE$packageName$QUOTE",
"&&",
"am force-stop",
"$QUOTE$packageName$QUOTE",
"&&",
"am kill",
"$QUOTE$packageName$QUOTE",
)
} else {
processesCount = 0
}
}
}
}
}.join()
}

suspend fun umount(dst: String) {
// umount -f "$dst"
execute(
Expand Down

0 comments on commit b8fc1c7

Please sign in to comment.