美文网首页我爱编程
动态加载jar、dex 热更新

动态加载jar、dex 热更新

作者: gadfly_only | 来源:发表于2018-04-13 23:41 被阅读203次

Android动态加载jar,dex,apk文件

image.png

1.程序没给分配sd卡权限

  1. mContext.getClassLoader()

public interface ITest {
    public void getWebUrl(String webUrl,OnGetDownLoadUrlListener listener);
}
public interface OnGetDownLoadUrlListener {
    void onSuccess(String downUrl);
    void onFailed(String error);
}

package com.example.apk;

import android.annotation.SuppressLint;
import android.content.Context;

import java.io.File;
import java.lang.reflect.Constructor;

import dalvik.system.DexClassLoader;

/**
 * @author:LiJiaZhi on 2018/4/13
 * @des:ToDo
 * @org mtime.com
 */
public class Test implements ITest {

    private ITest mTest;
    private Context mContext;
    private String mJarPath;
    private String mClassName;

    public Test(Context context) {
        mContext = context;
        getTestInstanceDynamicFromSDCard();
    }

    /**
     * 一定要注意必须有sd卡权限,不然一直报错,class not found
     */
    @SuppressLint("NewApi")
    private void getTestInstanceDynamicFromSDCard() {
        // get test instance by dynamic
        mJarPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/loader.dex";// 前半部分为获得SD卡的目录
        mClassName = "com.example.apk.out.DemoTest";//和导出之前的包名和类名保持一致
        File dexOutputDir = mContext.getApplicationContext().getDir("dex", 0);//
        File file = new File(mJarPath);
        DexClassLoader classLoader = new DexClassLoader(file.getAbsolutePath(),
                dexOutputDir.getAbsolutePath(), null, mContext.getClassLoader());
        try {
            Class<?> clazz = classLoader.loadClass(mClassName);
            Constructor<?> constructor = clazz.getConstructor(new Class[]{});//得到构造器
            mTest = (ITest) constructor.newInstance();//实例化

//or这种方法
//Class clazz = classLoader.loadClass(mClassName);
//mTest = (ITest) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void getWebUrl(String webUrl, OnGetDownLoadUrlListener listener) {
        mTest.getWebUrl(webUrl,listener);
    }
}

相关文章

  • 动态加载jar、dex 热更新

    Android动态加载jar,dex,apk文件 坑 1.程序没给分配sd卡权限 mContext.getClas...

  • 热更新预言

    热更新 参考链接 安卓热更新之Nuwa实现步骤 Android动态加载Dex机制解析 https://github...

  • activity插件化hook

    动态加载: 加载已安装和未安装的apk 动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有de...

  • 动态加载

    定义 加载so文件 加载dex/jar/apk文件 动态加载的基础就是classloader,一个app中至少需要...

  • Android插件化开发笔记

    目前主流的技术:插件化,热更新,增量更新 动态加载 1.解决一个dex不能加载65535个方法的问题2.解耦合3....

  • android动态加载jar/dex

    今天来彻底了解一下这个android的这个jar和dex,主要参考下方连接文章。 android动态加载jar/d...

  • 类加载流程

    Android类加载器继承关系 动态加载Dex方案一 动态加载Dex方案二 阅读原文

  • DexCloassLoader与PathClassLoader

    DexClassLoader与PathClassLoader DexClassLoader可以加载jar、dex、...

  • 类加载原理分析&动态加载Jar/Dex

    简书 编程之乐转载请注明原创出处! JVM类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化...

  • Android 动态加载原理

    热修复、mutidex等都是基于安卓动态加载实现的动态插装dex文件的应用实例,那么究竟他们都是如何实现的,让我们...

网友评论

    本文标题:动态加载jar、dex 热更新

    本文链接:https://www.haomeiwen.com/subject/ezhkkftx.html