Android fragments 在我自己的应用程序上显示来自其他应用程序的活动
我想在片段上启动一个应用程序(示例计算器),例如在我的应用程序上 我尝试了这段代码,但出现了一个错误(行片段): 我收到此错误(line loadClass): 10-0317:50:22.77614133-14133/?W/System.err:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//System/app/Calculator/Calculator.apk“],NativeLibraryDirectory=[/vendor/lib64,/System/lib64]]上未找到类“com.android.calculator2.Calculator” 10-03 17:50:22.776 14133-14133/? W/System.err:at-dalvik.System.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 10-03 17:50:22.776 14133-14133/? W/System.err:at java.lang.ClassLoader.loadClass(ClassLoader.java:511)Android fragments 在我自己的应用程序上显示来自其他应用程序的活动,android-fragments,android-activity,Android Fragments,Android Activity,我想在片段上启动一个应用程序(示例计算器),例如在我的应用程序上 我尝试了这段代码,但出现了一个错误(行片段): 我收到此错误(line loadClass): 10-0317:50:22.77614133-14133/?W/System.err:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//System/app/Calculator/Calculator.apk“],NativeLibraryDirectory=[/vend
10-03 17:50:22.776 14133-14133/? W/System.err:at java.lang.ClassLoader.loadClass(ClassLoader.java:469)您不能这样做。您可以将计算器作为
活动启动
,但不能将外来代码加载到自己的操作系统进程中。那将违反安全规定
计算器应用程序的代码仅允许在计算器应用程序的操作系统进程中运行,而不允许在任何其他操作系统进程中运行。Android安全模型不允许这样做。链接是什么?解释一下,这是可能的吗
String packageName = "com.android.calculator2";
Context ctx = getApplicationContext().createPackageContext(packageName, Context.CONTEXT_INCLUDE_CODE |
Context.CONTEXT_IGNORE_SECURITY);
ClassLoader cl = ctx.getClassLoader();
Class<?> c = cl.loadClass("com.android.calculator2.Calculator");
Fragment fragObj = (Fragment)c.newInstance();
final File dexTemp = getDir("temp_folder", 0);
final String fullName = "com.android.calculator2.Calculator";
boolean isLoaded = true;
// Check if class loaded
try {
requiredClass = Class.forName(fullName);
} catch(ClassNotFoundException e) {
isLoaded = false;
}
if (!isLoaded) {
System.out.println("apkPath: " + apkPath);
System.out.println("dexTemp.getAbsolutePath(): " + dexTemp.getAbsolutePath());
final DexClassLoader classLoader = new DexClassLoader(apkPath,
dexTemp.getAbsolutePath(),
null,
getClass().getClassLoader());
/* DexClassLoader classLoader = new DexClassLoader(apkPath,"/tmp", null,
getClass().getClassLoader());*/
requiredClass = classLoader.loadClass(fullName);
}