Могу ли я загрузить apk, который я поместил в свою папку res/raw/, с помощью ClassLoader? И для загрузки apk я использую openRawResources().
Загрузите apk с помощью ClassLoader и openRawResources
Ответы (3)
Я не знаю, можете ли вы сделать это из ресурса, но если вы извлекаете ресурс в файловую систему, вы можете использовать следующую последовательность (которая игнорирует исключения, которые вам нужно будет обработать). Отсюда вы можете использовать обычные методы отражения для «loadedClass».
DexClassLoader classLoader = new DexClassLoader(
"/path/to/your/apk", getFilesDir().getAbsolutePath(),
null, getClass().getClassLoader());
Class<?> loadedClass = classLoader.loadClass("full.package.and.class.name");
Вы всегда можете сбросить этот файл в файловую систему и загрузить его с помощью отражения и DexFile, что дает вам доступ к вашему классу на основе отражения.
Вы, конечно, можете загрузить APK-файл, но вы не можете просто «запустить» его (так как сначала необходимо установить приложение), и ваше приложение не может устанавливать новые приложения (из-за политики безопасности).
Если вам нужно какое-то другое приложение для вашей программы, вы должны упомянуть об этом при первом запуске или что-то в этом роде.
Вы можете открыть .apk-файл, используя что-то для распаковки (например, 7zip). Но вы не можете использовать классы внутри него, так как в нем нет нормальных .class-файлов.
Это связано с тем, что Android использует не обычную JVM, а DVM. Это JVM, основанная на проекте Apache Harmony и оптимизированная для работы на устройствах с небольшим объемом памяти (например, на телефонах Android). Эта JVM не использует обычный байт-код Java (который находится в .class файлах), а использует собственный байт-код Dalvik, который создается Android SDK (инструмент dx) при экспорте вашего проекта.
Короче говоря: вы не можете получить доступ к классам в APK-файле из своего приложения. Нет, если у вас нет исходного кода для самостоятельной компиляции классов.
См. статью Википедии.
.dex-файлов. См. здесь
- person Lukas Knuth; 26.05.2011