动态创建Activity模式 运行时动态创建并编译一个Activity类,这种想法不是天方夜谭,动态创建类的工具有dexmaker和asmdex,二者均能实现动态字节码操作,最大的区别是前者是创建dex 使用dexmaker动态创建一个类 运行时创建一个编译好并能运行的类叫做“动态字节码操作(runtime bytecode manipulation)”,使用dexmaker工具能创建一个dex文件,之后我们再反编译这个 dexMaker = new DexMaker(); // Generate a HelloWorld class. ", Modifier.PUBLIC, TypeId.OBJECT); generateHelloMethod(dexMaker, helloWorld); dexMaker, TypeId<?
若想使用 Android Instrumented tests 的话,还需要添加 dexmaker 和 dexmaker-mockito 依赖到 Gradle 的构建文件中。 .+' androidTestCompile "com.google.dexmaker:dexmaker:1.2" androidTestCompile "com.google.dexmaker :dexmaker-mockito:1.2" } 6、实例:使用mockito写一个instrumented unit test 6.1 创建一个测试的Android应用 创建一个包名为com.vogella.android.testing.mockito.contextmock ' androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile "com.google.dexmaker :dexmaker:1.2" androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2" // Mockito 和
EasyMock 3.2 版本开始增加了Android的支持,需要额外引入依赖: <dependency> <groupId>org.droidparts.dexmaker</groupId> <artifactId>dexmaker</artifactId> <version>1.5</version> </dependency> Mock 对象 可以使用mock方法来mock对象,引入静态方法
市面有几种强力选择:能够实时深下地底修改引擎虚拟机直接操动虚拟机的魔头如Dalvik生成域API的DexMaker;专用于指令修改操控级的工具库类如ASMDEX。
利用该功能实现了很多我们熟知的开发工具,从 Android Studio 中的 Network 及 Memory 分析器,到调试器中的模拟框架,如 dexmaker-mockito-inline、MockK
DexMaker:用于在Dalvik VM编译时或运行时生成代码的基于java语言的一套API。 ASMDEX:一个字节码操作库(ASM),但它处理Android可执行文件(DEX字节码)。
AndroidMethodHook 基于Sophix的原理,用dexmaker动态生成类,将原方法保存下来,从而实现了AOP。 一个Method对象就行了,这个方法必须要有你想执行的代码,以及必要的declaring_class, dex_method_index 等成员;要达到这个目的,可以使用运行时字节码生成技术,比如 dexmaker
prebuilts/android-emulator Fetching project platform/external/libutf Fetching project platform/external/dexmaker