学习自
https://www.jianshu.com/p/e359fafe5c29
问题
我们插件apk是不会进行一个安装的,那么他的manifest就不会生效,所以我们直接启动肯定是行不通的。所以我们只能隔绝掉我们主apk的manifest的检测。
具体思路如下
只需要动态代理hook,先在AMS的startActivity的方法中的Intent中启动一个已注册的活动假扮,然后在ActivityThread.H.launchActivity的处理中替换我们真实的Intent即可!
具体代码不解释了,很简单!
package com.example.myapplication; import android.app.Activity; import android.app.Application; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.util.Log; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class App extends Application { private static final String TAG = "xbh"; @Override public void onCreate() { super.onCreate(); mContext = this; try { hookStartActivity(); hookLaunchActivity(); } catch (Exception e) { e.printStackTrace(); } } private Context mContext; /** * hook */ public void hookStartActivity() throws Exception{ //ActivityManagerNative.gDefault Class<?> amnClazz = Class.forName("android.app.ActivityManagerNative"); Field defaultField