2010-11-23 102 views
5

我想在运行时在Android应用程序中注入代码。我试图用dx工具在sdcard中生成一个dexfile,但是当我想实例化时,它失败了。是否有任何工具可以注入生成新的达尔维克字节码的代码?我正在学习一些库,aspecjt或android的guice。使用脚本语言更好吗?是否有可能在android应用程序中注入代码?

谢谢各位:)

+0

听起来你正在做什么是极其错误的,甚至如果它不工作,有更多的恶意使用超过合法 – Falmarri 2010-11-23 19:56:08

+0

这不是想法,我想用类似于BCEL或一个工具ASM。您可以将代码调整为可用的信息。 ; P – Sergio 2010-11-23 20:06:56

+1

如果您想通过调用动态添加的代码来扩展您自己编写的一个自己编写的应用程序,请重新编写问题。 – 2010-11-23 20:24:17

回答

-10

不,这是不可能的。如果可能的话,Android应用程序权限将不起作用。

2

您可以使用DexClassLoader类指定您自己的DEX文件。这被一些需要“插件”行为的应用程序所使用。

但是,设备上没有任何东西会生成DEX文件。没有任何机制可以即时生成代码并利用它。

0

Generating Dalvik Bytecode at Runtime on-device Using ASM or BCEL

此示例使用ASM和BCEL到generete设备上的两个类。 将这些类创建到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卡上创建新的ad-hoc类。 其次我已经将SD卡中的Dxclient功能转换为Dex Class。 最后,我创建了一个jar文件,然后我从SD卡

DXClient参考

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

5

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); 
相关问题