Advertisement
lu6id

MakeDeviceAdminPatch.kt

Dec 28th, 2024 (edited)
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 3.26 KB | None | 0 0
  1. package app.revanced.patches.all.deviceadmin
  2.  
  3. import app.revanced.patcher.patch.*
  4. import app.revanced.patcher.patch.resourcePatch
  5. import app.revanced.patcher.patch.smaliPatch
  6. import app.revanced.util.Utils
  7. import org.w3c.dom.Element
  8. import java.io.File
  9.  
  10. val deviceAdminPatch = Patch(
  11.     name = "Device Admin Patch",
  12.     description = "make any app into a Device Admin",
  13.     use = true
  14. ) {
  15.     // mofify andManifest
  16.     resourcePatch {
  17.         execute {
  18.             document("AndroidManifest.xml").use { document ->
  19.                 val applicationNode = document.getElementsByTagName("application").item(0) as Element
  20.                 val receiverNode = document.createElement("receiver").apply {
  21.                     setAttribute("android:name", ".MyDeviceAdminReceiver")
  22.                     setAttribute("android:label", "@string/app_name")
  23.                     setAttribute("android:permission", "android.permission.BIND_DEVICE_ADMIN")
  24.                 }
  25.                 applicationNode.appendChild(receiverNode)
  26.                 val metaNode = document.createElement("meta-data").apply {
  27.                     setAttribute("android:name", "android.app.device_admin")
  28.                     setAttribute("android:resource", "@xml/device_admin")
  29.                 }
  30.                 receiverNode.appendChild(metaNode)
  31.                 val intentFilter = document.createElement("intent-filter").apply {
  32.                     val actionNode = document.createElement("action").apply {
  33.                         setAttribute("android:name", "android.app.action.DEVICE_ADMIN_ENABLED")
  34.                     }
  35.                     appendChild(actionNode)
  36.                 }
  37.                 receiverNode.appendChild(intentFilter)
  38.             }
  39.         }
  40.     }
  41.  
  42.     // aadd device_admin.xml
  43.     resourcePatch {
  44.         execute {
  45.             val resXmlDirectory = get("res/xml")
  46.             File(resXmlDirectory, "device_admin.xml").apply {
  47.                 writeText(
  48.                     """
  49.                    <?xml version="1.0" encoding="utf-8"?>
  50.                    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  51.                         <uses-policies>
  52.                             <limit-password />
  53.                             <watch-login />
  54.                         </uses-policies>
  55.                     </device-admin>
  56.                     """.trimIndent()
  57.                )
  58.            }
  59.        }
  60.    }
  61.  
  62.    // add DeviceAdminReceiver smali class
  63.    smaliPatch {
  64.        execute {
  65.            val packageName = Utils.getPackageName("AndroidManifest.xml")
  66.            val smaliDirectory = get("smali/${packageName.replace('.', '/')}/MyDeviceAdminReceiver.smali")
  67.            File(smaliDirectory).apply {
  68.                writeText(
  69.                    """
  70.                     .class public L${packageName.replace('.', '/')}/MyDeviceAdminReceiver;
  71.                     .super Landroid/app/admin/DeviceAdminReceiver;
  72.                     .method public constructor <init>()V
  73.                         .locals 0
  74.                         invoke-direct {p0}, Landroid/app/admin/DeviceAdminReceiver;-><init>()V
  75.                         return-void
  76.                     .end method
  77.                     """.trimIndent()
  78.                )
  79.            }
  80.        }
  81.    }
  82. }
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement