отображать активность из другого приложения в моем собственном приложении - PullRequest
0 голосов
/ 03 октября 2019

Я хотел бы запустить приложение (пример калькулятора) для фрагмента, например, для моего приложения.

Я пытаюсь этот код, но получаю ошибку (строка Fragment):

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();

Я получаю эту ошибку:

Процесс: fr.jm.managercamera, PID: 14006 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {fr.jm.managercamera / fr.jm.managercamera.MainActivity}: java.lang.ClassCastException: com.android.calculator2.Calculator нельзя преобразовать в android.app.Fragment в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2325)

Я пытаюсь этот код, яполучить другую проблему:

Class requiredClass = null;final String apkPath = getPackageManager (). getApplicationInfo ("com.android.calculator2", 0) .sourceDir;

        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);
        }

Я получаю эту ошибку (строка loadClass):

10-0317: 50: 22,776 14133-14133 /? W / System.err: java.lang.ClassNotFoundException: не удалось найти класс «com.android.calculator2.Calculator» по пути: DexPathList [[zip-файл »/system/app/Calculator/Calculator.apk"],nativeLibraryDirectories=[/ vendor / lib64, / system / lib64]] 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) 10-03 17: 50: 22.776 14133-14133 /? W / System.err: at java.lang.ClassLoader.loadClass (ClassLoader.java:469)

1 Ответ

0 голосов
/ 03 октября 2019

Вы не можете этого сделать. Вы можете запустить калькулятор как Activity, но вы не можете загрузить чужой код в процесс своей собственной ОС. Это было бы нарушением безопасности.

Код приложения калькулятора разрешено запускать только в процессе ОС приложения калькулятора, но не в любом другом процессе ОС. Модель безопасности Android не позволяет этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...