0

我正在尝试使用 DexClassLoader 动态加载外部类,就像@Shlublu在这里提出的那样

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

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

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

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

4

1 回答 1

0

由于 APK 是标准的 Android 包,我的建议是您使用 APK 而不是 JAR。构建一个链接所需 JAR 的应用程序 APK(让 Android 构建工具“dex”JAR)但没有任何活动,然后像安装普通应用程序一样安装 APK。然后,您可以使用 访问 APK 文件本身PackageManager以获取其路径并使用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());
}
于 2017-02-16T17:17:17.863 回答