Android- 使用 DexClassLoader 加载 apk 文件

标签 android

我有点碰壁了。任何帮助,将不胜感激。我有一个应用程序,我想使用 DexClassLoader 加载另一个 apk 文件。

这是我的代码:

DexClassLoader dLoader = new DexClassLoader("/sdcard/download/test.apk","/sdcard/download",null,ClassLoader.getSystemClassLoader().getParent());
Class calledClass = dLoader.loadClass("com.test.classname");
Intent it=new Intent(this, calledClass);
it.setClassName("com.test", "com.test.classname");
startActivity(it);

现在我已经安装了 test.apk 所以当我运行上面的代码时 工作正常并启动了应用程序。但是我希望能够 在没有安装 test.apk 的情况下运行它(因为那会 击败应用程序的整个要点)。所以我卸载了它并 当我再次运行我的应用程序时,出现此错误:

android.content.ActivityNotFoundException: Unable to find explicit
activity class {com.test/com.test.classname}; have you declared this
activity in your AndroidManifest.xml.

所以我在这里有点难过。此 Activity 在 Manifest 中声明 我正在尝试运行的 apk。我不能在我的应用程序中声明它 显现。有什么想法吗?

谢谢, 克雷格

最佳答案

尝试使用 Android 的 PathClassLoader :

    String packagePath = "com.mypackage";
    String classPath = "com.mypackage.ExternalClass";

    String apkName = null;
    try {
        apkName = getPackageManager().getApplicationInfo(packagePath,0).sourceDir;
    } catch (PackageManager.NameNotFoundException e) {
        // catch this
    }

    // add path to apk that contains classes you wish to load
    String extraApkPath = apkName + ":/path/to/extraLib.apk" 

    PathClassLoader pathClassLoader = new dalvik.system.PathClassLoader(
            apkName,
            ClassLoader.getSystemClassLoader());

    try {
        Class<?> handler = Class.forName(classPath, true, pathClassLoader);
    } catch (ClassNotFoundException e) {
        // catch this
    }

关于Android- 使用 DexClassLoader 加载 apk 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2903260/

相关文章:

android - 从脚本chmod android文件系统

java - Android - 我可以以编程方式覆盖 simple_list_item_1 颜色吗?

Android:在保留默认主题的同时自定义 AlertDialog 的智能方法

java - Android:alertdialog中的微调器崩溃

android - SearchView 不显示在带有嵌套 fragment 的工具栏上

Android 的 AppCompatActivity.onMenuOpened 签名需要一个非空菜单,但收到一个空菜单,而不是

android - 通过 Intent 传递数据并接收

android - (Android) 线程化的 httpClient 任务,不阻塞 UI?

android - 使用 annotationProcessor 而不是 android-apt 的带有 Android Studio 3.0 Preview (Canary 2) 的 Dagger 2

android - 在 MVVM 架构中从 ViewModel 启动 Activity 的最佳方法