1
+ package me.iacn.hotxposed
2
+
3
+ import android.content.Context
4
+ import android.content.pm.PackageManager
5
+ import dalvik.system.PathClassLoader
6
+ import de.robv.android.xposed.IXposedHookLoadPackage
7
+ import de.robv.android.xposed.XC_MethodReplacement
8
+ import de.robv.android.xposed.XposedHelpers
9
+ import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
10
+ import me.iacn.biliroaming.BuildConfig
11
+ import java.io.File
12
+
13
+ /* *
14
+ * Created by iAcn on 2019/3/25
15
+ * Email i@iacn.me
16
+ */
17
+ class HotXposedInit : IXposedHookLoadPackage {
18
+ @Throws(Throwable ::class )
19
+ override fun handleLoadPackage (lpparam : LoadPackageParam ) {
20
+ disableModulesUpdatedNotification(lpparam)
21
+ if (HOST_PACKAGE != lpparam.packageName && HOST_PACKAGE2 != lpparam.packageName
22
+ && HOST_PACKAGE3 != lpparam.packageName
23
+ && BuildConfig .APPLICATION_ID != lpparam.packageName) return
24
+ val moduleApkFile = moduleApkFile
25
+ if (! moduleApkFile.exists()) return
26
+ val classLoader = PathClassLoader (moduleApkFile.absolutePath, lpparam.javaClass.classLoader)
27
+ val xposedInitClass = classLoader.loadClass(REAL_XPOSED_INIT )
28
+ xposedInitClass?.let {
29
+ XposedHelpers .callMethod(it.newInstance(), " handleLoadPackage" , lpparam)
30
+ }
31
+ }
32
+
33
+ private fun disableModulesUpdatedNotification (lpparam : LoadPackageParam ) {
34
+ if (" de.robv.android.xposed.installer" == lpparam.packageName) {
35
+ XposedHelpers .findAndHookMethod(" de.robv.android.xposed.installer.util.NotificationUtil" , lpparam.classLoader,
36
+ " showModulesUpdatedNotification" , XC_MethodReplacement .DO_NOTHING )
37
+ }
38
+ }
39
+
40
+ @get:Throws(PackageManager .NameNotFoundException ::class )
41
+ private val moduleApkFile: File
42
+ get() {
43
+ val activityThread = XposedHelpers .callStaticMethod(XposedHelpers .findClass(" android.app.ActivityThread" , null ), " currentActivityThread" )
44
+ val context = XposedHelpers .callMethod(activityThread, " getSystemContext" ) as Context
45
+ val applicationInfo = context.packageManager.getApplicationInfo(BuildConfig .APPLICATION_ID , 0 )
46
+ return File (applicationInfo.sourceDir)
47
+ }
48
+
49
+ companion object {
50
+ private const val HOST_PACKAGE = " tv.danmaku.bili"
51
+ private const val HOST_PACKAGE2 = " com.bilibili.app.blue"
52
+ private const val HOST_PACKAGE3 = " com.bilibili.app.in"
53
+ private const val REAL_XPOSED_INIT = " me.iacn.biliroaming.XposedInit"
54
+ }
55
+ }
0 commit comments