问题描述
我正在尝试使用DexClassLoader动态加载外部类,例如@Shlublu 建议
当我执行我的应用程序并且DexClassLoader对象尝试查找该类时,它将引发ClassNotFound异常。 我在manifest.xml中添加了读写权限,所以这不是错误。
我认为问题是我用来制作要在应用程序中加载的.jar的方法。 所以我有一些问题...
- 使用dx工具将.java文件转换为.jar的正确方法是什么?
- 加载外部类的软件包是否必须与我的.jar文件的软件包相同? (我觉得不行)
我正在使用Android模拟器API 19(kit-kat)
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());
}