lauchModle 检测: ActivityStarter.startActivityUnchecked()
绕过AndroidManifest检测:
- 瞒天过海:使用代理
Activity
替换原来的Activity
拿到ActivityManagerNative
里面的IActivityManager
对象动态代理拦截startActivity
函数,获取原来的srcIntent
,重新new
一个代理Activity
的newIntent
,newIntent.putExtra(EXTRA_ORIGIN_INTENT,originIntent)
,然后用newIntent
替换原来的srcIntent
- 借尸还魂: 在
Activity
实例化之前(laucherActivity
的时候),判断intent
里面有没有EXTRA_ORIGIN_INTENT
字段,如果有的话取出来替换即可
拿到ActivityThread
对象里面的Handler
对象mH
,然后拿到new
一个Handler
的callback
,然后适进去,在这个callback
里面处理自己的回归需求。(设置callback的原因是因为我们只处理lauchActivy
,不影响其他的操作)。
这里注意AppCompatActivity
需要兼容,先拿到ActivityThread
里面的IPackageManager
,然后动态代理拦截getActivityInfo()
函数的ComponentName
替换为代理Activity
的ComponentName