上一篇《Xposed 插件开发之二: Xposed的一些知识》

一、 准备

  • 要去广告的app: 追杀神器3.75
  • 反编译工具: AndroidKiller1.3.1
  • 查看布局工具: UIAnimationView
  • 查看源码好工具: jadx

工具和例子源码打包链接:http://pan.baidu.com/s/1eSv6WpW 密码:ofe4
uiautomatorviewer在sdk的tool目录下,运行uiautomatorviewer.bat即可。
源码只有第一个例子

二、 思路

获取到广告控件,隐藏广告控件。
要去除的有: 首页的游戏中心(其余的广告自己尝试)

三、 分析宿主app

1. 获取控件类型和id

安装打开追书神器,利用UIAnimationView获取界面。

可以看到游戏中心控件是一个ImageView,id是home_action_menu_game

2. 获取所在类

利用反编译工具,我这里是AndroidKill1.3.1,反编译追书神器,可以知道追书神器的包名为com.ushaqi.zhuishushenqi,然后搜索home_action_menu_game,在public.xml可以看到控件的id:


再搜索这个id,可以看到调用类为HomeActivity,路径为.ui.home.HomeActivity

3. 获取控件实例

点击编辑器上部的java图标查看源码,把控件id转为十进制,ctrl+F进行搜索,获取对应的控件实例,这里看到为r

ps: AndroidKiller查看源码用的是dex2jar,这个工具有点鸡肋,所以推荐使用jadx或者jeb,用过都说屌

四、 编写Xposed插件

上面已经获取到类路径,和控件实例,接下来写插件。

1. 建立插件项目

利用AnrdoidStudio新建一个项目为去TM追书广告,把库和入口文件写好(不会的看我第一篇文章:http://blog.csdn.net/niubitianping/article/details/52571438)

2. 编写hook方法

直接贴代码:

package com.tpnet.testxposed;import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
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 Main implements IXposedHookLoadPackage {//要hook的应用的包名private String packet = "com.ushaqi.zhuishushenqi";@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {//不是追书神器就不hook了if (!loadPackageParam.packageName.equals(packet)) {return;}XposedBridge.log("开始hook追书神器");XposedHelpers.findAndHookMethod(packet + ".ui.home.HomeActivity", loadPackageParam.classLoader,"onCreate",Bundle.class,new XC_MethodHook() {/*** onCreate之后把按钮隐藏掉* @param param* @throws Throwable*/@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {//这个是我打包的一个方法ImageView image = HookUtils.getHookView(param,"r");// 设置属性,隐藏这个imageViewif (image != null) {XposedBridge.log("开始去除游戏中心");//这里隐藏游戏中心这个ImageViewimage.setVisibility(View.GONE);}}});}
}

getHookView 的源码,上一篇有说,就是获取控件:

    public static <T> T getHookView(XC_MethodHook.MethodHookParam param,String name) throws NoSuchFieldException, IllegalAccessException {Class clazz = param.thisObject.getClass();// 通过反射获取控件,无论parivate或者publicField field = clazz.getDeclaredField(name);field.setAccessible(true);return  (T) field.get(param.thisObject);}

3. 安装运行

安装后,在xposed勾选,重启。再打开追书神器是不是发现游戏中心的按钮不见了。

五、去除发现Tab的内容

去除 发现tab第4个item之后的内容

1. 查看控件布局

这里发现是一个ScrollView包裹LinearLayout,LinearLayout有Id,下面的frameLayout没有id,大概可以确定是通过addView来添加每个item,接下来看看源码验证。

2. 寻找控件

和之前一样,利用AndroidKiller搜索id,看在那个文件使用。查看到id是home_find_container,路径是ui.home.HomeFindFragment,这次利用jadx查看逻辑代码:

3. 编写插件

好了,和之前的推测是一致的,现在来继续编写插件,获取到控件实例,把5以前的都remove掉。

XposedHelpers.findAndHookMethod(packet + ".ui.home.HomeFindFragment", loadPackageParam.classLoader,"a",   //hook  a方法Activity.class,   //参数new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {//获取内容LinearLayoutLinearLayout linear = HookUtils.getHookView(param,"a");if (linear != null) {XposedBridge.log("开始去除item");for(int i= linear.getChildCount()-1; i>4 ;i--){linear.removeViewAt(i);}}}});

结果:

六、 去除第一屏等待

把第一屏的延迟设置为0秒

XposedHelpers.findAndHookMethod(packet + ".ui.SplashActivity", loadPackageParam.classLoader,"a",   //hooka方法long.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.args[0] = 0;   //把延迟秒数设置为0秒}});

[Android开发] Xposed 插件开发之三: 编写广告去除插件相关推荐

  1. [Android开发] Xposed 插件开发之一: Xposed入门

    一.什么是Xposed Xposed Framework 为来自国外XDA论坛(forum.xda-developers.com)的rovo89自行开发的一个开源的安卓系统框架. 它是一款特殊的安卓A ...

  2. Android开发:基于Kotlin编写一个简易计算器

    目录 前言 Kotlin学习tips 界面绘制及控件绑定 UI界面绘制 控件绑定 Button点击事件 运算逻辑 整体逻辑 边界情况 输入展示 点击数字键 点击运算符键 点击"=" ...

  3. java插件开发_编写一个IDEA插件之:自动生成Java代码

    我很喜欢IDEA的一键自动生成代码功能,例如自动生成构造方法.字段的Get/Set方法.ToString方法等等,除此之外,也有一些插件提供自动生成代码的功能,例如我们所熟悉的GsonFormat插件 ...

  4. android sdk插件开发教程,Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍...

    项目源码 系列教程 先树立一个概念,AS里项目的一切都可以视为对象,比如整个项目,项目里的每个文件,文件里的每个方法.每行语句等等都是一个对象.我们插件SDK的开发,主要工作就是针对这一个个的对象的分 ...

  5. java写一个android程序_【Android开发笔记】3.编写第一个Android程序

    前言 上一节我们通过一个Demo熟悉了Eclipse的基本使用.如何在模拟器和手机中运行以及如何打包成APK,但没具体编写代码,相信很多同学已经按耐不住了吧,这一节我们会动手编写代码来熟悉Androi ...

  6. Android开发xposed,用Android Studio开发Xposed插件项目步骤

    1.使用Android Studio新建项目,在app目录下新建lib,并导入xposed的jar包. jar包下载地址:https://jcenter.bintray.com/de/robv/and ...

  7. mysql 插件开发_编写MySQL Shell插件(REPORT)

    作者:马楚成  (Ivan Ma) 编译:徐轶韬 MySQL Shell is a powerful tool.  It allows Javascript, Python and SQL acces ...

  8. 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试

    1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1 ...

  9. 在Eclipse上搭建Android开发环境

    声明:转摘请注明http://blog.csdn.net/longming_xu/article/details/28241045 前言:为什么要写这么一篇文章?网上介绍Android开发环境搭建的文 ...

最新文章

  1. 通过System.Management获取操作系统信息
  2. JS解析XML文件和XML字符串
  3. android python opencv_使用Python和OpenCV自动化Android游戏
  4. anaconda安装tensorflow gpu_安装Tensorflow-gpu的来龙去脉
  5. python csv 大文件_Python性能调优:JSON到CSV,大文件
  6. Linux之grep及正则表达式
  7. mysql的原理图解_MySQL排序工作原理
  8. 学生成绩管理系统测试用例C语言,学生成绩管理系统测试用例.doc
  9. Android中设置输入法为数字输入
  10. Kotlin学习笔记 第一章开始 第二章 基础
  11. 出现画面抖动_无人机航拍延时画面抖动怎么办?PR中的这个增稳功能帮你解决...
  12. CSS3 animation 动画用法介绍
  13. LTO助推磁带大容量存储技术超越磁盘HDD
  14. 入职一家初创公司第一周的血与泪
  15. PowerMock注解PowerMockIgnore的使用方法
  16. AJAX与JavaScript脚本语言
  17. 关于有偿提供拼图响应式后台的通知
  18. 松川仪表IPO被终止:年营收2.58亿 林茂波夫妇控制77%股权
  19. macos 环境变量 source 重启后失效
  20. RGB和HSV区别与互相转换

热门文章

  1. 我国知识共享数学生态圈的发端历程
  2. 机器学习实操的7个步骤
  3. 手机闪存速度测试工具,AndroBench
  4. 服务器装qq传文件好吗,QQ发送的离线文件,能够在QQ服务器上永远保存下去,直到对方接收。()...
  5. Ubuntu18.04 搜狗输入法安装(史上最好用的输入法安装方法)
  6. Flash游戏抓取,flash网站抓取,网页游戏提取工具
  7. ElasticSearch学习(四)—— 中文按拼音排序拼音检索
  8. js 生成条形码例子
  9. 在中山大学会出现的电脑问题解决方案
  10. 社科院与杜兰大学金融管理硕士——承载梦想,带自己遨游世界的“风帆”