Можно ли ввести код в приложение для Android? - PullRequest
5 голосов
/ 23 ноября 2010

Я хотел бы добавить код в приложение для Android во время выполнения. Я пытался использовать инструмент dx для создания файла dexfile в SDCard, но когда я хочу создать экземпляр, это не удается. Существуют ли какие-либо инструменты для внедрения кода, генерирующего новый байт-код dalvik? Я изучаю некоторые библиотеки, aspecjt или Guice для Android. Лучше ли работать с языком сценариев?

Спасибо людям :)

Ответы [ 5 ]

6 голосов
/ 02 марта 2012

Dexmaker - новый и разработанный специально для этого.Вот часть примера с сайта проекта:

    DexMaker dexMaker = new DexMaker();

    // Generate a HelloWorld class.
    TypeId<?> helloWorld = TypeId.get("LHelloWorld;");
    dexMaker.declare(helloWorld, "HelloWorld.generated", Modifier.PUBLIC, TypeId.OBJECT);
    generateHelloMethod(dexMaker, helloWorld);

    // Create the dex file and load it.
    File outputDir = new File(".");
    ClassLoader loader = dexMaker.generateAndLoad(HelloWorldMaker.class.getClassLoader(),
            outputDir, outputDir);
    Class<?> helloWorldClass = loader.loadClass("HelloWorld");

    // Execute our newly-generated code in-process.
    helloWorldClass.getMethod("hello").invoke(null);
2 голосов
/ 24 ноября 2010

Вы можете указать свой собственный файл DEX с классом DexClassLoader. Это используется несколькими приложениями, которым нужно поведение "плагина".

Однако на устройстве нет ничего, что могло бы генерировать файлы DEX. Нет механизма генерации кода на лету и его использования.

0 голосов
/ 08 августа 2013

Вы можете посмотреть эту страницу, но вы должны использовать некоторые инструменты, такие как APKTool, SignApk.

http://blackhatcrackers.blogspot.de/2013/05/injecting-custom-code-into-android-apks.html

0 голосов
/ 01 марта 2012

Генерация байт-кода Dalvik во время выполнения на устройстве с использованием ASM или BCEL

В этом примере используются ASM и BCEL для генерации двух классов на устройстве.Классы создаются в памяти SD-карты, а затем динамически загружаются в операционную систему Android.

Следующий пример является шаблоном примера:

public class HelloWorld {
    public static void hello(){
        int a=0xabcd;
        int b=0xaaaa;
        int c=a-b;
        String s=Integer.toHexString(c);
        System.out.println(s);
    }

}

Сначала я использовал BCEL илиASM для создания нового специального класса в SD Card.Во-вторых, я преобразовал класс Java в класс Dex с помощью утилиты Dxclient на SD-карте.Наконец, я создал файл JAR, а затем я загрузил этот пакет в устройство с SD-карты

Ссылка DXClient

https://github.com/headius/dexclient/blob/master/src/DexClient.java

0 голосов
/ 23 ноября 2010

Нет, это невозможно.Разрешения приложений Android не будут работать, если это возможно.

...