标签:自定义类 开发者 mint tle monit cut nal 支持 影响

public synchronized static boolean canDexposed(Context context) {
if (!DeviceCheck.isDeviceSupport(context)) {
return false;
}
return loadDexposedLib(context); //load xposed lib for hook.
}public synchronized static boolean canDexposed(Context context) { if (!DeviceCheck.isDeviceSupport(context)) { return false; } return loadDexposedLib(context); //load xposed lib for hook.}private static boolean loadDexposedLib(Context context) {
try {
if (android.os.Build.VERSION.SDK_INT > 19){
System.loadLibrary("dexposed_l");
} else if (android.os.Build.VERSION.SDK_INT == 10
|| android.os.Build.VERSION.SDK_INT == 9 || android.os.Build.VERSION.SDK_INT > 14){
System.loadLibrary("dexposed");
}
return true;
} catch (Throwable e) {
return false;
}
}private static boolean loadDexposedLib(Context context) { try { if (android.os.Build.VERSION.SDK_INT > 19){ System.loadLibrary("dexposed_l"); } else if (android.os.Build.VERSION.SDK_INT == 10 || android.os.Build.VERSION.SDK_INT == 9 || android.os.Build.VERSION.SDK_INT > 14){ System.loadLibrary("dexposed"); } return true; } catch (Throwable e) { return false; }}compile ‘com.taobao.android:dexposed:0.1.1@aar‘compile ‘com.taobao.android:dexposed:0.1.1@aar‘System.loadLibrary("dexposed");System.loadLibrary("dexposed");// Check whether current device is supported (also initialize Dexposed framework if not yet)
if (DexposedBridge.canDexposed(this)) {
Log.i("bqt", "Use Dexposed to kick off AOP stuffs.");
} else {
Log.i("bqt", "Not Supported");
}// Check whether current device is supported (also initialize Dexposed framework if not yet)if (DexposedBridge.canDexposed(this)) { Log.i("bqt", "Use Dexposed to kick off AOP stuffs.");} else { Log.i("bqt", "Not Supported");}// Target class, method with parameter types, followed by the hook callback (XC_MethodHook).
DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() {
// To be invoked before Activity.onCreate().
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// "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 = new Intent();
// 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()
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2);
}
});// Target class, method with parameter types, followed by the hook callback (XC_MethodHook).DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() { // To be invoked before Activity.onCreate(). protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // "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 = new Intent(); // 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() protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2); }});DexposedBridge.findAndHookMethod(Log.class, "d", String.class, String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam arg0) throws Throwable {
String tag = (String) arg0.args[0];
String msg = (String) arg0.args[1];
System.out.println(tag + "," + msg);
}
});DexposedBridge.findAndHookMethod(Log.class, "d", String.class, String.class, new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam arg0) throws Throwable { String tag = (String) arg0.args[0]; String msg = (String) arg0.args[1]; System.out.println(tag + "," + msg); }});DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
Log.i("bqt", "Re-writing the method logic outside the original method context is a bit tricky but still viable");
return new Object();
}
});DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodReplacement() { protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { Log.i("bqt", "Re-writing the method logic outside the original method context is a bit tricky but still viable"); return new Object(); }});File cacheDir = getExternalCacheDir();
if (cacheDir != null) {
String fullpath = cacheDir.getAbsolutePath() + File.separator + "patch.apk";//这个是我们下载到本地的热修复包
PatchResult result = PatchMain.load(this, fullpath, null);
if (result.isSuccess()) {
Log.i("bqt", "hotPath load apk success.");
} else {
Log.i("bqt", "hotPath load apk error. " + result.getErrorInfo());
}
}File cacheDir = getExternalCacheDir();if (cacheDir != null) { String fullpath = cacheDir.getAbsolutePath() + File.separator + "patch.apk";//这个是我们下载到本地的热修复包 PatchResult result = PatchMain.load(this, fullpath, null); if (result.isSuccess()) { Log.i("bqt", "hotPath load apk success."); } else { Log.i("bqt", "hotPath load apk error. " + result.getErrorInfo()); }}| Runtime | Android Version | Support |
| Dalvik | 2.2 | Not Test |
| Dalvik | 2.3 | Yes |
| Dalvik | 3 | No |
| Dalvik | 4.0-4.4 | Yes |
| ART | 5 | Testing |
| ART | 5.1 | No |
| ART | M | No |
标签:自定义类 开发者 mint tle monit cut nal 支持 影响
原文地址:https://www.cnblogs.com/baiqiantao/p/9160366.html