`

android 动态加载sdcard jar的方法

阅读更多
1.新建Android工程,封装功能java类。
2.选中需要导出的文件夹,右键选中“Export”->"Java(Jar file)"导出jar文件。hello.jar
3.使用dx工具将jar包转换为android 字节码。
    命令:dx --dex --output=xx.jar hello.jar

然后把xx.jar放到mnt/sdcard/ 或者其他路径

假如:hello.jar  定义如下:
package com.example.test;

public class Plug {


public int add(int a,int b){
return a+b;
}

public String test(){
return "carter";
}
}


4.使用
private void useDexClassLoader() {
      
        String dexPath = "/mnt/sdcard/xx.jar";
        String dexOutputDir = "/data/data/"+getPackageName();
        Log.v(TAG, "dexOutputDir="+dexOutputDir);


        DexClassLoader pathClassLoader = new DexClassLoader(dexPath, dexOutputDir, null, this
                .getClass().getClassLoader());
        // dexPath 目标jar或apk的路径 ; dexOutputDirdex 文件路径 ;null 目标类中使用的c/c++库存放的路径
        // ; 第四个参数 父装载类
        try {
            Class class1 = pathClassLoader.loadClass("com.example.test.Plug");       //xx.jar包名+类名
            Object object = class1.newInstance();
            Class[] params = new Class[2];
            params[0] = Integer.TYPE;
            params[1] = Integer.TYPE;
            Method action = class1.getMethod("add", params);
            Integer ret = (Integer) action.invoke(object, 12, 13);
           
            Log.v(TAG, "method : " + action.getName() + ", return :" + ret);
           
       
            
            action = class1.getMethod("test");
            String aa = (String) action.invoke(object);
           
            Log.v(TAG, "method : " + action.getName() + ", return :" + aa);
           
        } catch (Exception e) {
            // TODO: handle exception
        e.printStackTrace();
        }

    }
5.这样就实现了从网络下载jar,然后不通过adb install -r 来更新apk了,这种方式适合广告类的插件,因为可以在后台动态加载,不需要弹出更新安装的对话框
分享到:
评论

相关推荐

    Dynamic_jar:android 插件化动态加载jar

    android 插件化动态加载jar 有时候会看到一些应用对应的SDcard里的文件夹里有 ***.jar 等文件,现在明白这些文件大概是用来做应用内自动更新用的。 打比方说,类似eclipse 可以通过预留接口,安装各种插件一样。  ...

    opencv_android开发库

    拷贝openvc-2.3.1.jar和两个文件夹armeabi和armeabi-v7a到android项目的libs目录下 在oncreate中添加如下代码 private ImageView imageView = null; @Override protected void onCreate(Bundle ...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    BrowserEclipse-2013.1.13.7z

    android4.0浏览器在eclipse中编译的方法: BrowserEclipse\docs\readme.txt 注意: 如果下载已经修过的源码,只要进行3、4、8步骤就应该可以了。 eclipse版本;adt-bundle-windows (Android Developer Tools ...

    EspressoXMLTestRunner:运行 Espresso 测试后生成 xml 报告

    下载 jar 文件,并将 jar 文件添加到您的 android 测试项目中。 编辑 AndroidManifest.xml 将检测标签中的 android:name 设置为: ...

    丁丁播放器

    【个人仓促开发,完成度不高,难免会有bug,不知道锤子帮会不会召唤我。...在导入工程后如果出现错误,记得检查android-support-v4.jar路径,可重新添加,一般在Android SDK目录下:\sdk\extras\android\support\v4\

    AndroidDownload

    1 使你的android project引用此工程(其实只需要把library添加至你的工程的lib包就可以了) 2 DownloadController downloadController = DownloaderUtil.getInstance().download("", "/mnt/sdcard/QQMusic.exe", 4, ...

    Android版本更新实例详解

    1、导入xutils的jar包 2、在AndroidManifest.xml中添加权限 3、选择下载的路径,和下载apk文件的网址 private String url=”http://www.oschina.NET/uploads/osc-Android-v2.6.4-release.apk”; private ...

    xUtils3 demo

    xUtils 包含了很多实用的android工具. xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUtils 最低兼容Android 4.0 (api level 14...

    崩溃日志上传框架LogReport.zip

     .setLogDir(getApplicationContext(), "sdcard/" this.getString(this.getApplicationInfo().labelRes) "/")//定义路径为:sdcard/[app name]/  .setWifiOnly(true)//设置只在Wifi状态下上传,设置为false为...

Global site tag (gtag.js) - Google Analytics