I'm afraid there is no way around at least the "decompiling" step, in order to even understand what is going on internally. If you're lucky, you may find ways to "inject" custom code without changing original classes, but it really depends on the implementation. And the implementation is almost guaranteed to be (at least slightly) different for the various devices...