rpc.exports = { instrument() { setTimeout(function () { Java.perform(function () { let className = 'android.os.Parcel'; let methodName = 'writeTypedArray'; // ERROR //let methodName = 'writeTypedList'; // WORKS let classObject = Java.use(className); let methodObject = classObject[methodName]; let parametersTypes = (['[Landroid.os.Parcelable;', 'int']); // writeTypedArray parameters //let parametersTypes = (['java.util.List']); // writeTypedList parameter methodObject.overload.apply(this, parametersTypes).implementation = function () { var cmd = "this[method.methodName](" for (var j = 0; j < arguments.length; j++) { cmd += "arguments[" + j + "]," } cmd = cmd.substring(0, cmd.length - 1); cmd += ")" send("before " + className + "." + methodName + "(" + JSON.stringify(arguments) + ")"); let ret = eval(cmd); send("after " + className + "." + methodName + ", returnValue: " + JSON.stringify(ret)); return ret; }; }) }, 0); send('ready'); } };