【问题标题】:Load external classes in Android在 Android 中加载外部类
【发布时间】:2017-02-16 16:53:47
【问题描述】:

我正在尝试使用 DexClassLoader 动态加载外部类,例如 @Shlublu 建议 here

当我执行我的应用程序并且 DexClassLoader 对象尝试查找类时,它会引发 ClassNotFound 异常。我在manifest.xml中添加了读写权限,所以不是错误。

我认为问题在于我用来制作要加载到我的应用程序上的 .jar 的方法。所以我有一些问题......

  • 使用 dx 将 .java 文件转换为 .jar 的正确方法是什么 工具?
  • 加载外部类的包必须和我的.jar文件的包相同吗? (我认为没有)

我正在使用 Android 模拟器 API 19 (kit-kat)

【问题讨论】:

    标签: android classnotfoundexception dexclassloader


    【解决方案1】:

    由于 APK 是标准的 Android 包,我的建议是您使用 APK 而不是 JAR。构建链接所需 JAR 的应用程序 APK(让 Android 构建工具“dex”JAR)但没有任何活动,然后像安装普通应用程序一样安装 APK。然后,您可以使用 PackageManager 访问 APK 文件本身以获取其路径并使用 DexClassLoader 加载它。

    public static ClassLoader loadAPK(final Context context, final String appName) throws PackageManager.NameNotFoundException {
        final String apkPath = context.getPackageManager().getApplicationInfo(appName, 0).sourceDir;
        final File tmpDir = context.getDir("tmp", 0);
        return new DexClassLoader(apkPath, tmpDir.getAbsolutePath(), null, context.getClassLoader());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多