用androidstudio编写第一个xposed模块

前提:你的手机装了xposedinstaller ,已经获取root权限,否则以下内容不用看了。
参考链接:https://blog.csdn.net/mrglaucusss/article/details/50963542

配置准备工作

我的as版本是3.1的。所以基于此版本做操作

  • 新建一个工程包名随便取。我取了com.notrace

  • MainActivity代码简单如下:

              package com.notrace;
        import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.Toast;
    
      public class MainActivity extends AppCompatActivity {
    
      @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          findViewById(R.id.buttonPanel).setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
              Toast.makeText(MainActivity.this,hook(),Toast.LENGTH_SHORT).show();
              }
          });
      }
    
      public String hook(){
      return "未被劫持";
      }
    }
    

很简单,一个button点击弹出toast,显示hook函数返回值,我的目标就是修改这个hook的返回值

  • 修改清单文件,在application节点下添加

                    <meta-data
          android:name="xposedmodule"
          android:value="true" />
      <meta-data
          android:name="xposeddescription"
          android:value="你猜猜" />
      <meta-data
          android:name="xposedminversion"
          android:value="54" />
    

第一个表示是否是xposed模块
第二个是描述,随便你写
第三个是最低的api版本支持

  • 修改app/gradle

            repositories {
          jcenter()
      }
      dependencies {
        compileOnly 'de.robv.android.xposed:api:82'
        compileOnly 'de.robv.android.xposed:api:82:sources'
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.0'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
      }
    

注意,上面两个一定要修改为compileOnly 如果你是低版本的as可以改成provided

代码
  • 新建HookTest 类:
          package com.notrace;

        import de.robv.android.xposed.IXposedHookLoadPackage;
        import de.robv.android.xposed.XC_MethodHook;
        import de.robv.android.xposed.XposedBridge;
      import de.robv.android.xposed.XposedHelpers;
      import de.robv.android.xposed.callbacks.XC_LoadPackage;

      public class HookTest implements IXposedHookLoadPackage {
          @Override
          public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam)           throws Throwable {


    if(loadPackageParam.packageName.equals("com.notrace")){
        XposedBridge.log("NOTRACE"+loadPackageParam.packageName);

        Class clazz=loadPackageParam.classLoader.loadClass("com.notrace.MainActivity");

        XposedHelpers.findAndHookMethod(clazz, "hook", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult("你已经被劫持了");
            }
        });
    }
}
  }
  • 添加xposed入口,新建assets:
    微信截图_20180511182235.png

xposed_init内容如下:

      com.notrace.HookTest
  • 至此结束,然后如果你没有禁用instant run 那么你就得打一个带签名的安装包,然后安装到手机上,然后再xposed installer模块中勾选你编写的module,然后手机重启生效。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,169评论 25 709
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,757评论 2 45
  • 即便是教学生也是要有底线的,我发现孩子们也在不断的试探老师的底线,比如说写作业他可以写一页但他想试探你跟你讨价还价...
    Lesliewang阅读 1,490评论 0 0
  • 中学时候,有一年暑假在家,某天妈妈说,今天下午你们兄妹两个做饭,锻炼一下,每人两个菜。其实,哥哥经常下厨,不就想锻...
    梦小仙杂记阅读 3,118评论 0 2
  • 刚学到到生物时,分娩那一节,就在想这个问题,女人一定要生小孩吗。 我不了解外国怎么样,但在中国,结婚,紧接着,就是...
    冬令时阅读 3,424评论 4 0

友情链接更多精彩内容