【问题标题】: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());
}