xiongzhu 11 月之前
父节点
当前提交
9ccea8ae10

+ 1 - 1
app/build.gradle

@@ -24,7 +24,7 @@ android {
         applicationId "com.example.modifier"
         minSdk 33
         targetSdk 34
-        versionCode 166
+        versionCode 167
         versionName "1.0.1"
         archivesBaseName = "modifier-${versionCode}"
 

+ 14 - 2
app/src/main/java/com/example/modifier/service/TaskRunner.kt

@@ -1,6 +1,7 @@
 package com.example.modifier.service
 
 import android.content.Context
+import android.os.Environment
 import android.util.Log
 import android.view.accessibility.AccessibilityNodeInfo
 import androidx.core.content.ContextCompat
@@ -69,6 +70,7 @@ import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import kotlinx.coroutines.withTimeout
 import kotlinx.coroutines.withTimeoutOrNull
+import org.apache.commons.lang3.RandomStringUtils
 import java.io.File
 import java.time.LocalDateTime
 import java.time.temporal.ChronoUnit
@@ -667,7 +669,11 @@ class TaskRunner(
     ) {
         try {
             val file = withContext(Dispatchers.IO) {
-                File.createTempFile("files", ".apk")
+                File.createTempFile(
+                    "temp",
+                    ".apk",
+                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+                )
             }
 
             HttpClient(OkHttp) {
@@ -693,7 +699,13 @@ class TaskRunner(
                     }
                 }
             Log.i(TAG, "Apk file saved to ${file.path}")
-            shellRun("pm install -d -r ${file.path}")
+
+            val installPath = "/data/local/tmp/${RandomStringUtils.randomAlphabetic(8)}.apk"
+            shellRun(
+                "cp ${file.path} $installPath",
+                "pm install -d -r $installPath",
+                "rm -f $installPath"
+            )
             onSuccess()
             file.delete()
         } catch (e: Exception) {

+ 13 - 3
app/src/main/java/com/example/modifier/ui/utils/UtilsFragment.kt

@@ -3,6 +3,7 @@ package com.example.modifier.ui.utils
 import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
+import android.os.Environment
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
@@ -62,6 +63,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
+import org.apache.commons.lang3.RandomStringUtils
 import java.io.File
 
 class UtilsFragment : Fragment() {
@@ -407,8 +409,11 @@ class UtilsFragment : Fragment() {
 
         job = CoroutineScope(Dispatchers.IO).launch {
             try {
-                val file = File.createTempFile("files", ".apk")
-
+                val file = File.createTempFile(
+                    "temp",
+                    ".apk",
+                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+                )
                 ktorClient.prepareGet(url)
                     .execute { httpResponse ->
                         val channel: ByteReadChannel = httpResponse.body()
@@ -428,7 +433,12 @@ class UtilsFragment : Fragment() {
                         }
                     }
                 Log.i(TAG, "A file saved to ${file.path}")
-                shellRun("pm install -d -r ${file.path}")
+                val installPath = "/data/local/tmp/${RandomStringUtils.randomAlphabetic(8)}.apk"
+                shellRun(
+                    "cp ${file.path} $installPath",
+                    "pm install -d -r $installPath",
+                    "rm -f $installPath"
+                )
             } catch (e: Exception) {
                 Log.e(TAG, "Failed to download apk", e)