Let me introduce the Xposed framework, which gives you the possibility to modify your ROM - without modifying any APK (developers) or flashing (users)!
For a quick start, have a look at XDA's "Android Basics 101" on Xposed: http://www.youtube.com/watch?v=uRR0Flqx9M8
Some technical details:
I extended the /system/bin/app_process executable to load a JAR file on startup. The classes of this file will sit in every process (including the one for system services) and can act with their powers. And even more: I have implemented something that allows developers to replace any method in any class
(may it be in the framework, systemui or a custom app). This makes Xposed very powerful. You can change parameters for the method call, modify the return value or skip the call to the method completely - it's all up to you! Also replacing or adding resources is easy, thanks to many helpers in Xposed's API that developers can use.
- No need to modify any APKs. This means:
- No need to decompile, change things in smali, compile, sign, ...
- It will work for odexed and deodexed ROMs.
- Your mod is not bound to a specific version of the ROM. Unless there is a major change in the methods called for a certain functionality, your mod will continue to work even when you upgrade your ROM. Many modules work for a wide range of ROMs from different vendors.
- Multiple mods can be installed at the same time, even if they modify the same app. So you can use these battery icons and those quick toggles. Even hooking the same method twice is possible. Of course, this only works properly if the mods are not trying to do incompatible things.
- It does its magic at runtime. That means that developers can implement settings and do changes based on them (instead of statically forcing a certain behavior). Or you can have some extra logic for certain ROMs, without building different mod versions.
- It can be disabled easily without having to reflash.
- It's open source and free (as in beer and in speech).
- There is a repository with many popular modules.
You can download the installer from http://dl.xposed.info/latest.apk
. The attached disabler zip is only needed if you are in a boot loop.
An experimental version for Gingerbread made by liudongmiao can be found here: http://forum.xda-developers.com/show...4#post44034334
(no support from my side though)
How to install:
First step for everything you do: Create a nandroid backup and make sure you know how to restore it!
I'm not responsible for anything you do with your phone/tablet/rice cooker.
There is also the risk to soft-brick your device. In such a case, see below for ways to recover from it.
Installation of the framework:
- Download the Xposed Installer APK and install it
- Launch the Xposed Installer, go to the "Framework" section and click on "Install/Update"
You can verify this by starting the Xposed Installer again and making sure that the numbers in the "Framework" section are green.
If app_process jumped back to an older version (or none at all), you probably have a ROM with S-On or similar, which reverts any changes to /system after a reboot. Use installation via recovery in such cases.
Installation of any modules:
(note that you can install the framework and enable/disable multiple modules at once and reboot afterwards)
In case you get into a boot loop:
- Download <module>.apk (e.g. via the builtin repository browser) and install it
- Launch the Xposed Installer and go to the "Modules" section (you will also get there if you click on the notification warning you that the module is not enabled yet)
- Enable the module by checking the checkbox
First, try using the safemode by pressing any hardware key repeatedly. You can find a short explanation how it works here
If that doesn't work, you can flash the attached Xposed-Disabler-Recovery.zip by Tungstwenty. It will be copied to your (external) SD card when you install Xposed as well. The only thing it does is copying /system/bin/app_process.orig back to /system/bin/app_process, which you can also do yourself (e.g. with adb shell in recovery mode).
The official repository for Xposed modules, which can also be access from within the app itself (with download/update support), can be found at http://repo.xposed.info
There is also a whole XDA subforum
for modules and an index/request thread
Please don't use the "Xposed General" forum for requests or problems with modules!
Use the thread of the module instead.
How to write a module:
If you are an interested developer, give it a try. The development tutorial
will help you get started. Further documentation (e.g. how to replace resources) is here
. And of course, you can ask your development questions in the "Xposed General" forum.
If you have suggestions for new functions the framework could provide (which means they should be useful for more than your module), you can do this there as well. However, requests that I or somewhen else should write a module for xyz are NOT allowed. Again, this subforum is only about the framework.
(the C++ part)
(the Java part)
Where to get help:
First, read the FAQ
and search the "Xposed General
" forum. If you don't find your answer there, please check this explanation
to find out where you should post your question (e.g. module requests/questions don't belong into the "Xposed General" forum).
Tungstwenty for his many contributions, both in code and thoughts
XDA admins, news writers and supporters for making Xposed known to so many people
All those volunteers who help answering questions about Xposed
The people who donated to get me a Nexus 5 for earlier KitKat support
All the translators: http://translate.xposed.info/
(if you want to contribute more translations, please follow the instructions mentioned on that page)