• android 加载远程Jar、APK


    参考链接:

    1、http://blog.csdn.net/bboyfeiyu/article/details/11710497
    2 http://www.cnblogs.com/LittleRedPoint/p/3429709.html

    第一步:编写接口

    package com.lpl;

    public interface ILoader {

    public String sayHelloWorld();
    }

     第二步:实现接口

    package com.lpl;
    
    public class Remote implements ILoader{
    
        @Override
        public String sayHelloWorld() {
            return "sayHelloWorld i am a jar";        
        } 
       
    }

    第三步:打包jar

    使用Eclipse的Export功能,导出指定的包或者java文件

    第四步:使用dx命令处理jar文件

    dx --dex --output=G:
    emote_dex.jar G:
    emote.jar

    注意:dx命令可能在platform-tools中,也可能在build-tools中的子目录中

    第五步:将dex拷贝到android项目的包目录下面

    1、直接放入sdcard可能会报异常,原因是android系统对sdcard的读写权限做了限制
    2、需要在androidManifest中添加读写权限
    3、jar需要放入到android/data/com.***目录下

    第六步:

    File file                = new File(Environment.getExternalStorageDirectory().toString()+File.separator+"android/data/com.example.test/remote_dex.jar");
    Class lib                = null;
            
            try {
    //            BaseDexClassLoader cl     = new BaseDexClassLoader(Environment.getExternalStorageDirectory().toString(), file, file.getAbsolutePath(), getClassLoader());
                DexClassLoader     cl        = new DexClassLoader(file.getAbsolutePath(), file.getPath()    , null, getClassLoader());
                lib                        = cl.loadClass("com.lpl.Remote");
              
                ILoader loader            = (ILoader)lib.newInstance();
                Toast.makeText(getApplicationContext(), ""+loader.sayHelloWorld(), 3000).show();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

    // 这里要注意,APk中也要有接口文件,远程的jar只是对接口文件的实现

    补充:

    远程加载jar、apk有两个目的1、为了类;2、为了资源;类只要拿到jar、apk通过反射就可以拿到,资源必须拿到context
    http://www.cnblogs.com/weiwelcome0/p/3583870.html
  • 相关阅读:
    软件架构设计箴言理解
    解决vs2010没有NET Framework 2.0和3.5
    .NET连接数据库实例
    CSS选择器大全
    SilverLight全屏代码
    SilverLight数字时钟 > 我的博客有SilverLight了
    comboBox设置为只读(只选)
    WinForm 单例模式实例
    标识种子和标识增量
    jQuery固定DIV实现“返回顶部”
  • 原文地址:https://www.cnblogs.com/lipeil/p/4952483.html
Copyright © 2020-2023  润新知