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
原创粉丝点击