Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
修改Hook方式,使用公用类来处理
  • Loading branch information
sky-wei committed Jul 23, 2018
1 parent 4ff74f3 commit 2ad4cbf
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 101 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Expand Up @@ -65,4 +65,5 @@ dependencies {
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.baoyz.swipemenulistview:library:1.3.0'
implementation 'com.tencent.bugly:crashreport:2.6.6'
implementation 'com.github.sky-wei:xposed-javax:1.0.1'
}
26 changes: 17 additions & 9 deletions app/src/main/java/com/sky/xposed/aweme/Main.java
Expand Up @@ -20,13 +20,15 @@
import android.content.Context;

import com.sky.xposed.aweme.hook.HookManager;
import com.sky.xposed.aweme.util.Alog;
import com.sky.xposed.javax.MethodHook;
import com.sky.xposed.javax.XposedPlus;

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

public class Main implements IXposedHookLoadPackage {
public class Main implements IXposedHookLoadPackage, MethodHook.ThrowableCallback {


@Override
Expand All @@ -42,15 +44,16 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th

private void hookAwemeApplication(final XC_LoadPackage.LoadPackageParam lpparam) {

XposedHelpers.findAndHookMethod(
"com.ss.android.ugc.aweme.app.AwemeApplication",
lpparam.classLoader,
"onCreate",
new XC_MethodHook() {
// 设置默认的参数
XposedPlus.setDefaultInstance(new XposedPlus.Builder(lpparam)
.throwableCallback(this)
.build());

XposedPlus.get()
.findMethod("com.ss.android.ugc.aweme.app.AwemeApplication", "onCreate")
.hook(new MethodHook.BeforeCallback() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
public void onBefore(XC_MethodHook.MethodHookParam param) {

Application application = (Application) param.thisObject;
Context context = application.getApplicationContext();
Expand All @@ -62,4 +65,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
}
});
}

@Override
public void onThrowable(Throwable throwable) {
Alog.e("Throwable", throwable);
}
}
151 changes: 62 additions & 89 deletions app/src/main/java/com/sky/xposed/aweme/hook/AweMeHook.java
Expand Up @@ -43,17 +43,15 @@
import com.sky.xposed.aweme.hook.handler.AutoPlayHandler;
import com.sky.xposed.aweme.ui.dialog.SettingsDialog;
import com.sky.xposed.aweme.ui.util.LayoutUtil;
import com.sky.xposed.aweme.util.Alog;
import com.sky.xposed.aweme.util.DisplayUtil;
import com.sky.xposed.aweme.util.ResourceUtil;
import com.sky.xposed.aweme.util.ToStringUtil;
import com.sky.xposed.javax.MethodHook;
import com.squareup.picasso.Picasso;

import java.util.List;

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

Expand Down Expand Up @@ -110,14 +108,12 @@ public void onModifyValue(String key, Object value) {
*/
private void autoPlayHook() {

findAndHookMethod(
findMethod(
mVersionConfig.classBaseListFragment,
mVersionConfig.methodOnResume,
new XC_MethodHook() {
mVersionConfig.methodOnResume)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);

public void onAfter(XC_MethodHook.MethodHookParam param) {
// Alog.d(">>>>>>>>>>>>>>>>>> onResume " + param.thisObject);

// 保存当前对象
Expand All @@ -129,14 +125,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});

findAndHookMethod(
findMethod(
mVersionConfig.classBaseListFragment,
mVersionConfig.methodOnPause,
new XC_MethodHook() {
mVersionConfig.methodOnPause)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);

public void onAfter(XC_MethodHook.MethodHookParam methodHookParam) {
// Alog.d(">>>>>>>>>>>>>>>>>> onPause " + param.thisObject);

// 重置对象
Expand All @@ -147,15 +141,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});

findAndHookMethod(
findMethod(
mVersionConfig.classHomeChange,
mVersionConfig.methodHomeChange,
String.class,
new XC_MethodHook() {
String.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);

public void onAfter(XC_MethodHook.MethodHookParam param) {
// 获取Tab切换的名称
String name = (String) param.args[0];
mAutoPlayHandler.setAutoPlay("HOME".equals(name));
Expand All @@ -165,15 +157,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {

private void videoSwitchHook() {

findAndHookMethod(
findMethod(
mVersionConfig.classVerticalViewPager,
mVersionConfig.methodVerticalViewPagerChange,
int.class, boolean.class, boolean.class, int.class,
new XC_MethodHook() {
int.class, boolean.class, boolean.class, int.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);

public void onAfter(XC_MethodHook.MethodHookParam param) {
// 切换的下标
int position = (int) param.args[0];

Expand Down Expand Up @@ -203,26 +193,24 @@ private void settingsHook() {
final Object itemData = XposedHelpers.newInstance(
adapterDataClass, Constant.Name.TITLE, false);

XposedHelpers.findAndHookConstructor(
adapterClass,
Context.class, List.class,
new XC_MethodHook() {
findConstructor(adapterClass, Context.class, List.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);

public void onAfter(XC_MethodHook.MethodHookParam param) {
// 添加到列表中
List list = (List) param.args[1];
list.add(itemData);
}
});

XposedHelpers.findAndHookMethod(

findMethod(
fragmentClass, mVersionConfig.methodMenuAction,
fragmentClass, String.class,
new XC_MethodReplacement() {
fragmentClass, String.class)
.replace(new MethodHook.ReplaceCallback() {

@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
public Object onReplace(XC_MethodHook.MethodHookParam param) {

Activity activity = (Activity) XposedHelpers
.callMethod(param.args[0], mVersionConfig.methodGetActivity);
Expand All @@ -234,7 +222,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
dialog.show(activity.getFragmentManager(), "settings");
return null;
}
return XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
return invokeOriginalMethod(param);
}
});
}
Expand All @@ -244,14 +232,13 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
*/
private void saveVideoHook() {

findAndHookMethod(
findMethod(
mVersionConfig.classShareFragment,
mVersionConfig.methodOnCreate,
Bundle.class,
new XC_MethodHook() {
Bundle.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
public void onAfter(XC_MethodHook.MethodHookParam param) {
// 注入View
injectionView((Dialog) param.thisObject);
}
Expand All @@ -268,27 +255,20 @@ private void otherHook() {
return ;
}

findAndHookMethod(
mVersionConfig.classSplashActivity,
mVersionConfig.methodOnCreate,
Bundle.class,
new XC_MethodHook() {

@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);

if (mUserConfigManager.isSkipStartAd()) {
try {
XposedHelpers.callMethod(param.thisObject,
mVersionConfig.methodSplashActivitySkip, new Bundle());
} catch (Throwable tr) {
Alog.d("跳转异常", tr);
}
}
}
}
);
// findMethod(
// mVersionConfig.classSplashActivity,
// mVersionConfig.methodOnCreate)
// .hook(new MethodHook.AfterCallback() {
// @Override
// public void onAfter(XC_MethodHook.MethodHookParam param) {
//
// if (mUserConfigManager.isSkipStartAd()) {
// // 路过广告
// XposedHelpers.callMethod(param.thisObject,
// mVersionConfig.methodSplashActivitySkip, new Bundle());
// }
// }
// });
}

private void injectionView(final Dialog dialog) {
Expand Down Expand Up @@ -378,14 +358,13 @@ private LinearLayout newButtonView(final Dialog dialog,

private void removeLimitHook() {

findAndHookMethod(
findMethod(
mVersionConfig.classVideoRecordActivity,
mVersionConfig.methodOnCreate,
Bundle.class,
new XC_MethodHook() {
Bundle.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
public void onAfter(XC_MethodHook.MethodHookParam param) {

if (mUserConfigManager.isRemoveLimit()) {

Expand All @@ -403,14 +382,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});

findAndHookMethod(

findMethod(
mVersionConfig.classVideoRecordNewActivity,
mVersionConfig.methodOnCreate,
Bundle.class,
new XC_MethodHook() {
Bundle.class)
.hook(new MethodHook.AfterCallback() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
public void onAfter(XC_MethodHook.MethodHookParam param) {

if (mUserConfigManager.isRemoveLimit()
&& !TextUtils.isEmpty(mVersionConfig.fieldShortVideoContext)) {
Expand All @@ -429,31 +408,25 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {

private void testHook() {

findAndHookMethod(
"android.app.Instrumentation", "execStartActivity",
findMethod("android.app.Instrumentation", "execStartActivity",
Context.class, IBinder.class, IBinder.class,
Activity.class, Intent.class, int.class, Bundle.class,
new XC_MethodHook() {

Activity.class, Intent.class, int.class, Bundle.class)
.hook(new MethodHook.BeforeCallback() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
public void onBefore(XC_MethodHook.MethodHookParam param) {

Intent intent = (Intent) param.args[4];
ToStringUtil.toString("Instrumentation#execStartActivity: " + intent.getComponent(), intent);
}
});

findAndHookMethod(
"android.app.Instrumentation", "execStartActivity",
findMethod("android.app.Instrumentation", "execStartActivity",
Context.class, IBinder.class, IBinder.class,
Activity.class, Intent.class, int.class,
Bundle.class, UserHandle.class,
new XC_MethodHook() {

Bundle.class, UserHandle.class)
.hook(new MethodHook.BeforeCallback() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
public void onBefore(XC_MethodHook.MethodHookParam param) {

Intent intent = (Intent) param.args[4];
ToStringUtil.toString("Instrumentation#execStartActivity: " + intent.getComponent(), intent);
Expand Down
30 changes: 27 additions & 3 deletions app/src/main/java/com/sky/xposed/aweme/hook/base/BaseHook.java
Expand Up @@ -25,8 +25,11 @@
import com.sky.xposed.aweme.hook.HookManager;
import com.sky.xposed.aweme.hook.VersionManager;
import com.sky.xposed.aweme.util.Alog;
import com.sky.xposed.javax.MethodHook;
import com.sky.xposed.javax.XposedPlus;

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;

Expand Down Expand Up @@ -71,14 +74,35 @@ public String getProcessName() {
}

public Class findClass(String className) {
return findClass(className, mParam.classLoader);
return XposedPlus.get().findClass(className);
}

public Class findClass(String className, ClassLoader classLoader) {
return XposedHelpers.findClass(className, classLoader);
}

public XC_MethodHook.Unhook findAndHookMethod(String className, String methodName, Object... parameterTypesAndCallback) {
return XposedHelpers.findAndHookMethod(className, mParam.classLoader, methodName, parameterTypesAndCallback);
public MethodHook findMethod(String className, String methodName, Object... parameterTypes) {
return XposedPlus.get().findMethod(className, methodName, parameterTypes);
}

public MethodHook findMethod(Class clazz, String methodName, Object... parameterTypes) {
return XposedPlus.get().findMethod(clazz, methodName, parameterTypes);
}

public MethodHook findConstructor(String className, Object... parameterTypes) {
return XposedPlus.get().findConstructor(className, parameterTypes);
}

public MethodHook findConstructor(Class clazz, Object... parameterTypes) {
return XposedPlus.get().findConstructor(clazz, parameterTypes);
}

public Object invokeOriginalMethod(XC_MethodHook.MethodHookParam param) {
try {
XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
} catch (Throwable e) {
Alog.d("异常了", e);
}
return null;
}
}
1 change: 1 addition & 0 deletions build.gradle
Expand Up @@ -31,6 +31,7 @@ allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}

Expand Down

0 comments on commit 2ad4cbf

Please sign in to comment.