Friday, May 9, 2014

Xposed - ROM modding without modifying APKs

modify your ROM - without modifying any APK (developers) or flashing (users)!

Read Original Thread here Its a Copy paste Content



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.


Advantages:
  • 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. Hell, it will probably even work with different ROMs.
    • Multiple mods can be installed at the same time, even if they change the same package. 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 you can implement options to let the user decide if they prefer the bikeshed to be painted in red or blue. 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.
Download:
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, restoring a backup is the easiest way to get rid of it (other possibilities mentioned below).




For the framework:
  1. Download the Xposed Installer APK and install it
  2. Launch the Xposed Installer, go to the "Framework" section and click on "Install/Update"
    In case you get a Segmentation Fault error, please install this additional app (not needed if the installation worked fine).
  3. Reboot
  4. Done!\
You can verify this by starting the Xposed Installer again. 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.

For any modules you want to install:

  1. Download <module>.apk and install it
  2. 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)
  3. Enable the module by checking the checkbox
  4. Reboot
  5. Done!
(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:
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).

Modules:
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
You can also have a look at this index: http://forum.xda-developers.com/show....php?t=2327541
Please don't use this thread for 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 this thread.
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 here as well. However, requests that I or somewhen else should write a module for xyz are NOT allowed here. Again, this thread is only about the framework.


Changelog:
1.0: Initial version
1.1: ???
1.2: Installer
1.5: Resource replacing
1.6: Some fixes and improvements [629 downloads]
2.0 rc2: Lots of thing redone. Supports (temporarily) replacing native libraries, lots of additions and changes for developers. [3,234 downloads]
2.0: Removed the native library replacement again, support for 4.1 and 4.2, Instagram crash fixed, ... [631 downloads]
2.0.1: Fixed a crash when a module tries to hook a function with "long" or "double" parameters [930 downloads]
2.0.2: Fixed a problem which resulted in a boot loop [4,310 downloads]
2.1: Various improvements, e.g. earlier callbacks for module loading. For details, see this post. [345 downloads]
2.1.1: Fixed a bug in drawable replacements [5,421 downloads]
2.1.2: Small fixes, added Chinese and Russian translations [11,415 downloads]
2.1.3: Reverted a change in 2.1.2 that caused bootloops; new translations and some more fixes [46,803 downloads]
2.1.4: Support for Galaxy S4 and HTC One plus a few minor fixes/enhancements (details) [208,176 downloads]
2.2: Builtin updater/module downloader, extended UI, support for Android 4.3 and more (details) [241,267 downloads]
2.3: x86, Knox, MIUI support (experimental), context menu in modules list and more (details) [18,219 downloads]
2.3.1: "Segmentation fault" during installation fixed [679,333 downloads]
2.4: Support for Android 4.4, performance improvements, log viewer, active check (details) [101,613 downloads]
2.4.1: Fixed bootloop on some x86 ROMs [2,537,642 downloads]
2.5: Rewritten installation, safemode, more compatibility (details) [821,792 downloads]
2.5.1: Compatibility with new CM11 nightlies and LG G2 theming engine

Source code:
https://github.com/rovo89/Xposed (the C++ part)
https://github.com/rovo89/XposedBridge (the Java part)
https://github.com/rovo89/XposedInstaller (Installer app)

Thanks to:
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

Translators:
[ar] Arabic: aljohanei
[az] Azerbaijani: hero355
[bg] Bulgarian: Stefan Stefanov
[ca] Catalan: Albert SamaniegoDavid Vaz Guijarro
[cs] Czech: Aleš BerkaPetr Reznícek
[de] German: rovo89Nils Wasser
[el] Greek: Theodore Keloglou
[es] Spanish: David Vaz Guijarro
[fr] French: tonymanou
[gl] Galician: David Vaz Guijarro
[hu] Hungarian: Adam77Root
[id] Indonesian: AngSanley
[it] Italian: Vincenzo Cerminara
[iw] Hebrew: DubelBoom
[ja] Japanese: Noumi Ryoko
[ko] Korean: marbulas
[ms] Malay: Abe Atok
[nb] Norwegian Bokmål: rosaage
[nl] Dutch: Gert-Jan AnemaLeonard SimonseMartin Coulon
[pl] Polish: czeci
[pt-rBR] Portuguese (Brazil): Marcio Andrade
[ro] Romanian: razorsbk
[ru] Russian: michfood
[sk] Slovak: pyler
[sr] Serbian: maleksa
[sv] Swedish: Fredrik Lundberg
[tr] Turkish: TheNorth34
[vi] Vietnamese: alienyd
[zh-rCN] Chinese (China): Cye3sliveasxYeechan Lu
[zh-rTW] Chinese (Taiwan): Cye3s

If you want to contribute more translations please use this file as a template. I can't accept translations based on decompiled APKs. Submissions on GitHub as pull request are preferred because it's easier for me.







No comments:

Post a Comment