2017-02-16 25 views
0

我试图加载使用DexClassLoader动态外部类,像@Shlublu提出here加载外部类中的Android

当我执行我的应用程序和DexClassLoader对象试图找到类,它抛出一个异常ClassNotFound的。我已经在manifest.xml中添加了读写权限,所以这不是错误。

我认为这个问题是我用来制作我想在我的应用程序中加载的.jar的方法。所以我有一些问题...

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

我使用的是Android模拟器API 19(KIT-KAT)

回答

0

由于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()); 
}