dexposed, dexposed为单个android应用程序启用'god'模式

分享于 

6分钟阅读

GitHub

  繁體 雙語
dexposed enable 'god' mode for single application.
  • 源代码名称:dexposed
  • 源代码网址:http://www.github.com/alibaba/dexposed
  • dexposed源代码文档
  • dexposed源代码下载
  • Git URL:
    git://www.github.com/alibaba/dexposed.git
    Git Clone代码到本地:
    git clone http://www.github.com/alibaba/dexposed
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/alibaba/dexposed
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    是什么?

    DownloadSoftware LicenseJoin the chat at https://gitter.im/alibaba/dexposed

    Dexposed是基于开源 Xposed的开发框架,它是一个强大而非侵入的运行时 AOP ( 面向方面编程) 框架,基于开源。

    Dexposed的AOP实现纯粹是非侵入性的,没有任何注解处理器。weaver或者字节码重写。 集成就像在应用程序的初始化阶段中只在一行代码中加载一个小的JNI库一样简单。

    不仅是应用程序的代码,还可以挂钩在应用程序进程中运行的Android框架代码。 这个特性在Android开发中非常有用,因为我们开发人员大量依赖于Android平台( SDK )的旧版本。

    一组编译的Java AOP代码可以加载到运行的应用程序中,有效地改变目标应用程序的行为。

    典型用例

    • 经典的AOP编程
    • 测试( 用于测试,性能监视和 等等 )
    • 在线热补丁修复关键。紧急或者安全 Bug
    • 用于更好开发体验的SDK

    插件集成

    作为编译库直接添加 dexposed aar到项目,它包含 jar 文件" dexposedbridge.jar"2,因此来自'dexposed'目录的文件" libdexposed.so libdexposed_l所以"。

    Gradle依赖项如下所示:

     dependencies {
     compile 'com.taobao.android:dexposed:0.1.1@aar' }

    在你的应用程序的初始化阶段中,尽可能早地插入以下代码:

    publicclassMyApplicationextendsApplication {
     @OverridepublicvoidonCreate() { 
     // Check whether current device is supported (also initialize Dexposed framework if not yet)if (DexposedBridge.canDexposed(this)) {
     // Use Dexposed to kick off AOP stuffs.... }
     }
     ... }

    已经完成了。

    基本用法

    对于给定的方法,有三个注射点: 在之前,在之后,替换。

    示例 1: 在所有 Activity.onCreate(Bundle) 出现之前和之后附加一段代码。

    // Target class, method with parameter types, followed by the hook callback (XC_MethodHook).DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, newXC_MethodHook() {
     // To be invoked before Activity.onCreate().@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam) throwsThrowable {
     //"thisObject" keeps the reference to the instance of target class.Activity instance = (Activity) param.thisObject;
     // The array args include all the parameters.Bundle bundle = (Bundle) param.args[0];
     Intent intent =newIntent();
     // XposedHelpers provide useful utility methods.XposedHelpers.setObjectField(param.thisObject, "mIntent", intent);
     // Calling setResult() will bypass the original method body use the result as method return value directly.if (bundle.containsKey("return"))
     param.setResult(null);
     }
     // To be invoked after Activity.onCreate()@OverrideprotectedvoidafterHookedMethod(MethodHookParamparam) throwsThrowable {
     XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2);
     }
     });

    示例 2: 替换目标方法的原始主体。

    DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, newXC_MethodReplacement() {
     @OverrideprotectedObjectreplaceHookedMethod(MethodHookParamparam) throwsThrowable {
     // Re-writing the method logic outside the original method context is a bit tricky but still viable.... }
     });

    签出 example 项目以查找更多信息。

    支持

    Dexposed支持从安卓 2.3到 4.4 ( 没有包含 3.0 )的所有dalvik运行时arm架构设备。 长期产品实践中的稳定性已经证明。

    以下是支持状态。

    运行时Android版本支持
    Dalvik2.2不测试
    Dalvik2.3是的
    Dalvik3.0不是
    Dalvik4.0-4.4是的
    艺术5.0测试
    艺术5.1不是
    艺术M不是

    我们从社区开放,特别是拉请求和质量 Bug 报告。 目前,我们还在测试新的Android运行时的支持,我们珍视你的帮助来测试或者改进implementation的实现。

    Dexposed的目标是轻量级,透明和高效。 欢迎使用这些主体的所有改进。 同时,我们正在积极探索更有价值的用例,并基于Dexposed构建强大的工具。 我们对扩展用例感兴趣,并且感谢社区在Dexposed之上开发的工具。


    模式  SIN  Android 应用  DEX  GOD  
    相关文章