Android实现免安装插件(一)

在这个案例中,使用常规的startActivity启动一个未安装apk中的Activity,需要解决以下几个问题:
1、 ClassLoader如何找到需实例化Activity
2、 未在androidmanifest.xml中注册如何启动对应Activity
3、 Activity生命周期怎么实现
4、 资源如何加载


1、 ClassLoader如何找到需实例化Activity

ActivityThread中的performLaunchActivity中实例化Activity:

java.lang.ClassLoader cl = appContext.getClassLoader();
activity = mInstrumentation.newActivity(
                    cl, component.getClassName(), r.intent);

这里看到ClassLoader相信大家已经明白Activity实例怎么来的了,没错,就是通过反射。这里重点看下这个ClassLoader怎么来的,这样也许我们可以通过它干点事情。这个ClassLoader实际是在LoadedApk中创建的,如下:

mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip,
                    mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath,
                    libraryPermittedPath, mBaseClassLoader,
                    mApplicationInfo.classLoaderName);

一直跟踪代码,最终找到ClassLoader创建的地方:

public static ClassLoader createClassLoader(String dexPath,
            String librarySearchPath, ClassLoader parent, String classloaderName) {
        if (isPathClassLoaderName(classloaderName)) {
            return new PathClassLoader(dexPath, librarySearchPath, parent);
        } else 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值