2017-02-16 50 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()); 
}