x1ongzhu преди 1 година
родител
ревизия
a7c0d98fe0

+ 1 - 1
app/build.gradle

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

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -23,7 +23,10 @@
     <uses-permission android:name="android.permission.READ_SMS" />
     <uses-permission android:name="android.permission.WRITE_SMS" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
+    <queries>
+        <package android:name="com.github.metacubex.clash" />
 
+    </queries>
     <application
         android:name=".MyApplication"
         android:allowBackup="true"

+ 23 - 33
app/src/main/java/com/example/modifier/Global.kt

@@ -616,6 +616,7 @@ object Global {
         fresh: Boolean = false
     ): BackupItem {
         clearConv()
+        delay(3000)
 //        ModifierService.instance!!.toggleRcsSwitch(false)
         val context = Utils.getContext()
         val dest = File(
@@ -644,21 +645,19 @@ object Global {
         }
 
         val cmds = mutableListOf<String>()
-        cmds.addAll(packages.flatMap { mutableListOf("pm suspend $it", "am force-stop $it") })
 
         for (pkg in packages) {
             if (!shellRun("ls /data/data/$pkg")["error"]!!.contains("No such file or directory")) {
-                cmds.add("tar zcf $dest/$pkg/data.tar.gz -C /data/data $pkg ")
+                cmds.add("tar zcpf $dest/$pkg/data.tar.gz -C /data/data $pkg ")
             }
             if (!shellRun("ls /data/user_de/0/$pkg")["error"]!!.contains("No such file or directory")) {
-                cmds.add("tar zcf $dest/$pkg/data_de.tar.gz -C /data/user_de/0 $pkg ")
+                cmds.add("tar zcpf $dest/$pkg/data_de.tar.gz -C /data/user_de/0 $pkg ")
             }
             if (!shellRun("ls /sdcard/Android/data/$pkg")["error"]!!.contains("No such file or directory")) {
-                cmds.add("tar zcf $dest/$pkg/data_ext.tar.gz -C /sdcard/Android/data $pkg ")
+                cmds.add("tar zcpf $dest/$pkg/data_ext.tar.gz -C /sdcard/Android/data $pkg ")
             }
         }
 
-        cmds.addAll(packages.reversed().map { "pm unsuspend $it" })
         shellRun(*cmds.toTypedArray())
 
         val backup = BackupItem(
@@ -712,15 +711,11 @@ object Global {
         )
 
         shellRun(
-            "pm suspend com.google.android.apps.messaging",
-            "am force-stop com.google.android.apps.messaging",
-            "pm suspend com.google.android.gms",
-            "am force-stop com.google.android.gms",
-            "pm suspend com.google.android.gsf"
+            "pm disable-user com.google.android.apps.messaging",
+            "pm disable-user com.google.android.gms",
+            "pm disable-user com.google.android.gsf"
         )
-        val packageManager = Utils.getContext().packageManager
         for (pkg in packages) {
-            val uid = packageManager.getApplicationInfo(pkg, 0).uid
             for (item in listOf("data.tar.gz", "data_de.tar.gz", "data_ext.tar.gz")) {
                 val file = File("${backup.path}/$pkg/$item")
                 if (!file.exists()) {
@@ -732,30 +727,26 @@ object Global {
                     "data_ext.tar.gz" -> "/sdcard/Android/data"
                     else -> ""
                 }
-                shellRun("tar zxf ${file.path} -C $dest")
+                shellRun(
+                    "find $dest/$pkg -type f -delete",
+                    "tar zxf ${file.path} -C $dest --exclude \"**/AndroidPlatformServices.apk\""
+                )
             }
         }
         shellRun(
-            "pm unsuspend com.google.android.gsf",
-            "sleep 1",
-            "pm unsuspend com.google.android.gms",
-        )
-        delay(5000)
-        shellRun(
-            "pm clear com.google.android.gms",
-            "sleep 60",
-            "pm unsuspend com.google.android.apps.messaging",
+//            "pm clear com.google.android.gsf",
+            "pm enable com.google.android.gsf",
             "sleep 1",
+//            "pm clear com.google.android.gms",
+            "pm enable com.google.android.gms",
+//            "sleep 30",
+            "pm enable com.google.android.apps.messaging",
+            "sleep 3",
             CMD_MESSAGING_APP,
+            "sleep 5",
+            "am start -a android.intent.action.SENDTO -d sms:+18583199738 --es sms_body \"Test\" --ez exit_on_sent false"
         )
-        delay(5000)
-        ModifierService.instance!!.toggleRcsSwitch(true)
-//        var success = false
-//        ModifierService.instance!!.waitForRcsState(arrayOf(RcsConfigureState.CONFIGURED), 2.minutes)
-//            .let {
-//                success = it == RcsConfigureState.CONFIGURED
-//            }
-//        shellRun("am start -a android.intent.action.SENDTO -d sms:+18583199738 --es sms_body \"Test\" --ez exit_on_sent false")
+
         return true
     }
 
@@ -779,11 +770,10 @@ object Global {
     }
 
     @JvmStatic
-    fun isClashInstalled(): Boolean {
-        val context = Utils.getContext()
+    fun isClashInstalled(context: Context): Boolean {
         val packageManager = context.packageManager
         return try {
-            packageManager.getPackageInfo("com.github.kr328.clash", 0)
+            packageManager.getPackageInfo("com.github.metacubex.clash.meta", 0)
             true
         } catch (e: Exception) {
             false

+ 1 - 1
app/src/main/java/com/example/modifier/service/ModifierService.kt

@@ -1089,7 +1089,7 @@ class ModifierService : AccessibilityService(), Emitter.Listener {
                 try {
                     val device = KtorClient.get(DeviceApi.Id(id = Utils.getUniqueID()))
                         .body<DeviceResponse>()
-                    if (Global.isClashInstalled()) {
+                    if (Global.isClashInstalled(applicationContext)) {
 
                         val prefs = getSharedPreferences("settings", Context.MODE_PRIVATE)
                         if (TextUtils.isEmpty(device.clashProfile)) {