DexClassLoader的使用
来源:互联网 发布:影子银行规模数据 编辑:程序博客网 时间:2024/06/05 12:06
1.MainActivity .class代码:
package com.jswjtu.dexapkdemo;import android.app.Activity;import android.content.Intent;import android.content.pm.ActivityInfo;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.os.Environment;import android.util.Log;import dalvik.system.DexClassLoader;import java.io.File;import java.util.List;public class MainActivity extends Activity{ private String fileName = "DexApkGoal.apk"; private String className = "com.jswjtu.dexapkgoal.MainActivity"; private String TAG = "Dex"; private DexClassLoader classLoader; private Class<?> mClass; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(2130903040); getDex(); getDexClass(); } private void getDex() { String path = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/" + this.fileName; Log.e(this.TAG, "path = " + path); File dexOutputPath = getDir("dex", 0); this.classLoader = new DexClassLoader(path, dexOutputPath.getAbsolutePath(), null, getClassLoader()); Log.e(this.TAG, "classLoader = " + this.classLoader.toString()); } private void getDexClass() { try { this.mClass = this.classLoader.loadClass("com.jswjtu.dexapkdemo.LoaderTest"); Log.e(this.TAG, "mClass = " + this.mClass.getName()); ILoader loader = (ILoader)this.mClass.newInstance(); Log.e(this.TAG, loader.getString()); } catch (ClassNotFoundException e) { Log.e(this.TAG, "ClassNotFoundException"); e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } private void useDexClassLoader() { Intent intent = new Intent(this.className, null); PackageManager pm = getPackageManager(); Log.e(this.TAG, "PackageManager"); List resolveinfoes = pm.queryIntentActivities(intent, 0); Log.e(this.TAG, "ResolveInfo"); ActivityInfo actInfo = ((ResolveInfo)resolveinfoes.get(0)).activityInfo; Log.e(this.TAG, "ActivityInfo"); String pacageName = actInfo.packageName; String apkPath = actInfo.applicationInfo.sourceDir; String dexOutputDir = getApplicationInfo().dataDir; String libPath = actInfo.applicationInfo.nativeLibraryDir; Log.e(this.TAG, "libPath"); DexClassLoader calssLoader = new DexClassLoader(apkPath, dexOutputDir, libPath, getClass().getClassLoader()); Log.e(this.TAG, "DexClassLoader"); try { Class clazz = calssLoader .loadClass(pacageName + ".MainActivity"); Log.e(this.TAG, "mClass = " + this.mClass.getName()); } catch (ClassNotFoundException e) { Log.e(this.TAG, "ClassNotFoundException"); e.printStackTrace(); } }}
2.ILoader .java代码:
package com.jswjtu.dexapkdemo;abstract public class ILoader { abstract String getString();}
其他部分代码缺失,暂未补全,待完善…
即可;
0 0
- DexClassLoader的使用
- DexClassLoader的使用
- DexClassLoader的使用
- 使用DexClassLoader的简单例子
- 使用DexClassLoader调用SDCard上的jar
- 使用 DexClassLoader 動態載入 DEX
- Android中的DexClassLoader使用
- Android类装载器DexClassLoader的简单使用
- DexClassLoader相关的文章
- DexClassLoader
- 被用坏的DexClassLoader,关于DexClassLoader内存泄露的问题
- DexClassLoader一次失败的尝试
- DexClassLoader和PathClassLoader的区别
- DexClassLoader和PathClassLoader的区别
- dexclassloader与pathclassloader的区别
- 安卓之使用DexClassLoader&AssetManager启动插件的Activity实现功能插件化
- Android使用DexClassLoader 动态加载jar/apk
- Android使用DexClassLoader 动态加载jar/apk
- LeetCode-51&52.N-Queens
- php面试题之二——数据结构和算法(高级部分)
- 【mahapps.metro】WPF窗体关闭,提示用户是否退出对话框
- SVN中显示文件状态字母的含义
- 个人计算机编程环境配置
- DexClassLoader的使用
- 详解position的四个属性
- 提高PHP代码质量的36个技巧
- 技术常用网址
- php面试题之三——PHP网络编程(高级部分)
- JAVA性能剖析 JVM内存管理与垃圾回收
- Java虚拟机(HOTSPOT)源代码编译步骤
- mysql 学习笔记
- 作业——在线学习Android课程之第七周(HttpURLConnection)