Skip to content

Commit d0681d2

Browse files
committed
fix umeng bug
1 parent bb5fd77 commit d0681d2

File tree

8 files changed

+97
-23
lines changed

8 files changed

+97
-23
lines changed

app/src/main/java/com/yyxx/wechatfp/activity/HomeActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.yyxx.wechatfp.util.Task;
2020
import com.yyxx.wechatfp.util.Umeng;
2121
import com.yyxx.wechatfp.util.UrlUtil;
22+
import com.yyxx.wechatfp.util.bugfixer.TagManagerBugFixer;
2223
import com.yyxx.wechatfp.view.DonateView;
2324

2425
import java.util.ArrayList;
@@ -55,6 +56,7 @@ public void onCreate(Bundle savedInstanceState) {
5556
listView.setAdapter(mListAdapter);
5657
listView.setOnItemClickListener(this);
5758
Task.onMain(1000L, () -> UpdateFactory.doUpdateCheck(HomeActivity.this));
59+
TagManagerBugFixer.fix();
5860
}
5961

6062
@Override

app/src/main/java/com/yyxx/wechatfp/util/Umeng.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class Umeng {
1616
public static void init(Context context) {
1717
sContext = context;
1818
try {
19-
MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(context.getApplicationContext(), "59b68c81f5ade45de90004f7", "UM"));
19+
MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(context.getApplicationContext(), "59b68c81f5ade45de90004f7", context.getPackageName()));
2020
} catch (Exception e) {
2121
L.e(e);
2222
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.yyxx.wechatfp.util.bugfixer;
2+
3+
/**
4+
* Created by Jason on 2017/11/12.
5+
*/
6+
7+
public class TagManagerBugFixer {
8+
9+
public static void fix() {
10+
// for catching app global unhandled exceptions
11+
final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
12+
Thread.setDefaultUncaughtExceptionHandler(new MyHandler(defaultHandler));
13+
}
14+
15+
private static class MyHandler implements Thread.UncaughtExceptionHandler {
16+
17+
private final Thread.UncaughtExceptionHandler defaultHandler;
18+
19+
MyHandler(Thread.UncaughtExceptionHandler defaultHandler) {
20+
this.defaultHandler = defaultHandler;
21+
}
22+
23+
@Override
24+
public void uncaughtException(Thread thread, Throwable ex) {
25+
String classpath = null;
26+
if (ex != null && ex.getStackTrace().length > 0) {
27+
classpath = ex.getStackTrace()[0].toString();
28+
}
29+
if (classpath != null &&
30+
ex.getMessage().contains("Results have already been set") &&
31+
classpath.contains("com.google.android.gms.tagmanager") ) {
32+
// ignore
33+
} else {
34+
// run your default handler
35+
defaultHandler.uncaughtException(thread, ex);
36+
}
37+
}
38+
}
39+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.yyxx.wechatfp.util.bugfixer.xposed;
2+
3+
import com.yyxx.wechatfp.util.log.L;
4+
5+
import de.robv.android.xposed.XC_MethodHook;
6+
import de.robv.android.xposed.XposedBridge;
7+
import de.robv.android.xposed.XposedHelpers;
8+
9+
/**
10+
* Created by Jason on 2017/11/12.
11+
*/
12+
13+
public class XposedLogNPEBugFixer {
14+
15+
/**
16+
*
17+
java.lang.NullPointerException: println needs a message
18+
at android.util.Log.println_native(Native Method)
19+
at android.util.Log.i(Log.java:160)
20+
at de.robv.android.xposed.XposedBridge.log(XposedBridge.java:147)
21+
at com.fkzhang.qqxposedhooks.h.j$b.ʻ(Unknown Source)
22+
at com.fkzhang.qqxposedhooks.h.j$b.ʻ(Unknown Source)
23+
at com.fkzhang.qqxposedhooks.h.j$b.doInBackground(Unknown Source)
24+
at android.os.AsyncTask$2.call(AsyncTask.java:295)
25+
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
26+
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
27+
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
28+
at java.lang.Thread.run(Thread.java:818)
29+
*/
30+
public static void fix() {
31+
try {
32+
XposedHelpers.findAndHookMethod(XposedBridge.class, "log", String.class, new XC_MethodHook() {
33+
@Override
34+
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
35+
if (param.args[0] == null) {
36+
param.args[0] = "xx";
37+
}
38+
super.beforeHookedMethod(param);
39+
}
40+
});
41+
} catch (Exception e) {
42+
L.e(e);
43+
}
44+
}
45+
}

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedAlipayPlugin.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import com.yyxx.wechatfp.util.ImageUtil;
3232
import com.yyxx.wechatfp.util.StyleUtil;
3333
import com.yyxx.wechatfp.util.Task;
34-
import com.yyxx.wechatfp.util.Tools;
3534
import com.yyxx.wechatfp.util.Umeng;
3635
import com.yyxx.wechatfp.util.ViewUtil;
36+
import com.yyxx.wechatfp.util.bugfixer.xposed.XposedLogNPEBugFixer;
3737
import com.yyxx.wechatfp.util.log.L;
3838
import com.yyxx.wechatfp.view.SettingsView;
3939

@@ -65,6 +65,7 @@ public void main(final Context context, final XC_LoadPackage.LoadPackageParam lp
6565
L.d("Xposed plugin init version: " + BuildConfig.VERSION_NAME);
6666
try {
6767
Umeng.init(context);
68+
XposedLogNPEBugFixer.fix();
6869
final PackageInfo packageInfo = context.getPackageManager().getPackageInfo(lpparam.packageName, 0);
6970
final int versionCode = packageInfo.versionCode;
7071
String versionName = packageInfo.versionName;
@@ -449,21 +450,11 @@ private boolean tryInputGenericPassword(Activity activity, String password) {
449450
EditText pwdEditText = findPasswordEditText(activity);
450451
L.d("pwdEditText", pwdEditText);
451452
if (pwdEditText == null) {
452-
ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView();
453-
List<View> outList = new ArrayList<>();
454-
ViewUtil.getChildViews(rootView, outList);
455-
Tools.doUnSupportVersionUpload(rootView.getContext(), "[Alipay pwdEditText NOT FOUND] " + ViewUtil.viewsDesc(outList));
453+
return false;
456454
}
457455
View confirmPwdBtn = findConfirmPasswordBtn(activity);
458456
L.d("confirmPwdBtn", confirmPwdBtn);
459457
if (confirmPwdBtn == null) {
460-
ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView();
461-
List<View> outList = new ArrayList<>();
462-
ViewUtil.getChildViews(rootView, outList);
463-
Tools.doUnSupportVersionUpload(rootView.getContext(), "[Alipay confirmPwdBtn NOT FOUND] " + ViewUtil.viewsDesc(outList));
464-
return false;
465-
}
466-
if (pwdEditText == null) {
467458
return false;
468459
}
469460
pwdEditText.setText(password);

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedQQPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.yyxx.wechatfp.util.Tools;
3939
import com.yyxx.wechatfp.util.Umeng;
4040
import com.yyxx.wechatfp.util.ViewUtil;
41+
import com.yyxx.wechatfp.util.bugfixer.xposed.XposedLogNPEBugFixer;
4142
import com.yyxx.wechatfp.util.log.L;
4243
import com.yyxx.wechatfp.view.SettingsView;
4344

@@ -91,6 +92,7 @@ public void main(final Context context, final XC_LoadPackage.LoadPackageParam lp
9192
Task.onMain(1000, ()-> {
9293
Umeng.init(context);
9394
});
95+
XposedLogNPEBugFixer.fix();
9496
final PackageInfo packageInfo = context.getPackageManager().getPackageInfo(lpparam.packageName, 0);
9597
final int versionCode = packageInfo.versionCode;
9698
String versionName = packageInfo.versionName;

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedTaobaoPlugin.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@
3232
import com.yyxx.wechatfp.util.ImageUtil;
3333
import com.yyxx.wechatfp.util.StyleUtil;
3434
import com.yyxx.wechatfp.util.Task;
35-
import com.yyxx.wechatfp.util.Tools;
3635
import com.yyxx.wechatfp.util.Umeng;
3736
import com.yyxx.wechatfp.util.ViewUtil;
37+
import com.yyxx.wechatfp.util.bugfixer.xposed.XposedLogNPEBugFixer;
3838
import com.yyxx.wechatfp.util.log.L;
3939
import com.yyxx.wechatfp.view.SettingsView;
4040

@@ -71,6 +71,7 @@ public void main(final Context context, final XC_LoadPackage.LoadPackageParam lp
7171
L.d("Xposed plugin init version: " + BuildConfig.VERSION_NAME);
7272
try {
7373
Umeng.init(context);
74+
XposedLogNPEBugFixer.fix();
7475
final PackageInfo packageInfo = context.getPackageManager().getPackageInfo(lpparam.packageName, 0);
7576
final int versionCode = packageInfo.versionCode;
7677
String versionName = packageInfo.versionName;
@@ -488,19 +489,11 @@ private boolean tryInputGenericPassword(Activity activity, String password) {
488489
EditText pwdEditText = findPasswordEditText(activity);
489490
L.d("pwdEditText", pwdEditText);
490491
if (pwdEditText == null) {
491-
List<View> outList = new ArrayList<>();
492-
ViewUtil.getChildViews((ViewGroup) activity.getWindow().getDecorView(), outList);
493-
Tools.doUnSupportVersionUpload(activity, "[Taobao confirmPwdBtn NOT FOUND] " + ViewUtil.viewsDesc(outList));
492+
return false;
494493
}
495494
View confirmPwdBtn = findConfirmPasswordBtn(activity);
496495
L.d("confirmPwdBtn", confirmPwdBtn);
497496
if (confirmPwdBtn == null) {
498-
List<View> outList = new ArrayList<>();
499-
ViewUtil.getChildViews((ViewGroup) activity.getWindow().getDecorView(), outList);
500-
Tools.doUnSupportVersionUpload(activity, "[Taobao confirmPwdBtn NOT FOUND] " + ViewUtil.viewsDesc(outList));
501-
return false;
502-
}
503-
if (pwdEditText == null) {
504497
return false;
505498
}
506499
pwdEditText.setText(password);

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedWeChatPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.yyxx.wechatfp.util.Tools;
4343
import com.yyxx.wechatfp.util.Umeng;
4444
import com.yyxx.wechatfp.util.ViewUtil;
45+
import com.yyxx.wechatfp.util.bugfixer.xposed.XposedLogNPEBugFixer;
4546
import com.yyxx.wechatfp.util.log.L;
4647
import com.yyxx.wechatfp.view.SettingsView;
4748

@@ -69,6 +70,7 @@ public void main(final Context context, final XC_LoadPackage.LoadPackageParam lp
6970
L.d("Xposed plugin init version: " + BuildConfig.VERSION_NAME);
7071
try {
7172
Umeng.init(context);
73+
XposedLogNPEBugFixer.fix();
7274
//for multi user
7375
if (!Tools.isCurrentUserOwner(context)) {
7476
XposedHelpers.findAndHookMethod(UserHandle.class, "myUserId", new XC_MethodHook() {

0 commit comments

Comments
 (0)