[XPOSED MODULE][MOD] Enable BATTERY_STATS In KitKat

Search This thread

jiannist

Senior Member
Mar 28, 2009
566
572
I have installed and enabled the module (and of course rebooted). I use BetterBatteryStats and GSam.
BetterBatteryStats refuses to give alarm info unless installed as a system app, although I have checked the "Do not detect system app" checkbox.
Also, GSam shows this in the logcat: E/com.gsamlabs.bbm.lib.NotifyingService(29114): Error getting kernel wakelock stats my way - let's get the built in ones...
So doesn't the module work?
My phone is a Galaxy S5 using stock 4.4.4 ROM.
 

XlAfbk

Senior Member
Aug 11, 2010
1,484
440
FYI, it's broken on Lollipop:

Code:
I/Xposed  ( 3743):   Loading class com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall
I/Xposed  ( 3743): EnableBatteryStatsPermission failed to load a field - we won't be able to bypass any permissions.  This should NEVER happen.
E/Xposed  ( 3743): java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:308)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:272)
E/Xposed  ( 3743):      at com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall.<clinit>(HookGetStatisticsMethodCall.java:60)
E/Xposed  ( 3743):      at java.lang.reflect.Constructor.newInstance(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.newInstance(Class.java:1572)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:463)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:418)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:105)
E/Xposed  ( 3743): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/data/app/com.gsamlabs.xposed.mods.enablebatterystatspermission-1.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/Xposed  ( 3743):      ... 9 more
E/Xposed  ( 3743):      Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/system/framework/XposedBridge.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):              ... 10 more
E/Xposed  ( 3743):              Suppressed: java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):                      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/Xposed  ( 3743):                      at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):                      ... 11 more
E/Xposed  ( 3743):              Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
 

onexuan

Senior Member
Jun 1, 2010
1,224
995
www.onexuan.com
FYI, it's broken on Lollipop:

Code:
I/Xposed  ( 3743):   Loading class com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall
I/Xposed  ( 3743): EnableBatteryStatsPermission failed to load a field - we won't be able to bypass any permissions.  This should NEVER happen.
E/Xposed  ( 3743): java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:308)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:272)
E/Xposed  ( 3743):      at com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall.<clinit>(HookGetStatisticsMethodCall.java:60)
E/Xposed  ( 3743):      at java.lang.reflect.Constructor.newInstance(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.newInstance(Class.java:1572)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:463)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:418)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:105)
E/Xposed  ( 3743): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/data/app/com.gsamlabs.xposed.mods.enablebatterystatspermission-1.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/Xposed  ( 3743):      ... 9 more
E/Xposed  ( 3743):      Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/system/framework/XposedBridge.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):              ... 10 more
E/Xposed  ( 3743):              Suppressed: java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):                      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/Xposed  ( 3743):                      at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):                      ... 11 more
E/Xposed  ( 3743):              Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

I have tested it and found "Class.forName" can't find the system class (com.android.server.am.BatteryStatsService).
 

ASHURiCAN

Senior Member
Mar 12, 2011
533
125
FYI, it's broken on Lollipop:

Code:
I/Xposed  ( 3743):   Loading class com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall
I/Xposed  ( 3743): EnableBatteryStatsPermission failed to load a field - we won't be able to bypass any permissions.  This should NEVER happen.
E/Xposed  ( 3743): java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:308)
E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:272)
E/Xposed  ( 3743):      at com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall.<clinit>(HookGetStatisticsMethodCall.java:60)
E/Xposed  ( 3743):      at java.lang.reflect.Constructor.newInstance(Native Method)
E/Xposed  ( 3743):      at java.lang.Class.newInstance(Class.java:1572)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:463)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:418)
E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:105)
E/Xposed  ( 3743): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/data/app/com.gsamlabs.xposed.mods.enablebatterystatspermission-1.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/Xposed  ( 3743):      ... 9 more
E/Xposed  ( 3743):      Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/system/framework/XposedBridge.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/Xposed  ( 3743):              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):              ... 10 more
E/Xposed  ( 3743):              Suppressed: java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
E/Xposed  ( 3743):                      at java.lang.Class.classForName(Native Method)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/Xposed  ( 3743):                      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/Xposed  ( 3743):                      at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/Xposed  ( 3743):                      ... 11 more
E/Xposed  ( 3743):              Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
So, doesn't work on Lollipop? Do we still need this on Lollipop? Any alternative? I'm using the 3 apps (betterBatteryStats, Gsam and Wakelock Detector).

Thx.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 33
    Why is this needed? / Do I need this?

    Are you running KitKat or later? Is your battery monitor of choice working? If so, you do not need this. If not, it likely will do the trick - if it does not, contact the battery monitor developer and ask that they read the 'Developers' section of this app.

    Google decided to change the BATTERY_STATS permission to be signature|system, which on KitKat means an app cannot access battery statistics. Functions such as identifying which apps are consuming more resources than others will not function. https://code.google.com/p/android/issues/detail?id=61975

    Alternatively, copy your app into /system/priv-app which will provide the app access to BATTERY_STATS. Google also changed the name of the service however, so if your app hasn't been updated for KitKat, then using this XPosed module is the best way to go.


    What does this do?

    This uses the Xposed framework to provide an alternate implementation of the com.android.server.am.BatteryStatsService.getStatistics() method which will not enforce that the calling application have the BATTERY_STATS permission.

    In addition, this allows legacy apps who use the 'batteryinfo' service rather than the
    'batterystats' service to continue to function, since the only change was in the name.

    How do I install this?

    This mod requires that your device is rooted, that the Xposed framework is installed, and that this module is enabled via the Xposed installer app. After a phone reboot, your battery monitoring apps should start to work as they did before KitKat rolled around.

    1. You must have ROOT on your phone. If you do not, this is not for you.
    2. Install this package
    3. Download and install the Xposed installer if you do not yet have it: XDA Thread
    4. Install the “Framework" in the "Xposed Installer" and activate "Enable BatteryStats Permission" in "Modules".
    5. Reboot
    6. Run your battery monitor of choice.

    This app does not 'launch', so don't be surprised to not see any way to start this app.


    Is this safe?

    Yes - the code is open source, and very simple. Do keep in mind however that the Xposed framework allows you to enable modules that may be very dangerous - but this module is not one of them. You can find the source here: https://github.com/GSamLabs/EnableBatteryStatsPermission

    I'm a developer, but my app still doesn't work in KitKat!

    Check your logcat. Google also changed how network statistics were retrieved,
    removing some methods and replacing them with others (getTcpBytesReceived was
    removed for example).

    I'm a developer, can I pull this code directly into my app?

    Yes - by all means. Follow the great tutorial that the Xposed author has, and feel
    free to copy HookGetStatisticsMethodCall class directly into your app.
    https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

    That said - I recommend simply copying your app into /system/priv-app/, or using a
    helper app similar (or identical) to:
    https://github.com/GSamLabs/GSamBatteryMonitor-RootCompanion

    Where do I download it?

    I've attached the APK to this thread, but will also make it available in the Xposed modules repo.
    2
    Reserved for future use

    Apps confirmed to work with this mod - I'll attempt to keep this list updated as I hear about others...

    • GSam Battery Monitor
    • BetterBatteryStats
    • Wakelock Detector
    2
    Not sure if this module works as it should, my battery monitor widget still shows n/a for screen on time.. Other modules like notification mod and xblast work so xposed is working..

    Running cataclysm 4.4 rooted of course

    -Nexus 5 32gb

    I posted a new update (1.1) that also hooks the ServiceManager.getService method which will allow apps using the old 'batteryinfo' service to work. I've confirmed this works with a few different apps now...so pull the latest and give it another try...
    2
    FYI, it's broken on Lollipop:

    Code:
    I/Xposed  ( 3743):   Loading class com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall
    I/Xposed  ( 3743): EnableBatteryStatsPermission failed to load a field - we won't be able to bypass any permissions.  This should NEVER happen.
    E/Xposed  ( 3743): java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
    E/Xposed  ( 3743):      at java.lang.Class.classForName(Native Method)
    E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:308)
    E/Xposed  ( 3743):      at java.lang.Class.forName(Class.java:272)
    E/Xposed  ( 3743):      at com.gsamlabs.xposed.mods.enablebatterystatspermission.HookGetStatisticsMethodCall.<clinit>(HookGetStatisticsMethodCall.java:60)
    E/Xposed  ( 3743):      at java.lang.reflect.Constructor.newInstance(Native Method)
    E/Xposed  ( 3743):      at java.lang.Class.newInstance(Class.java:1572)
    E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:463)
    E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:418)
    E/Xposed  ( 3743):      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:105)
    E/Xposed  ( 3743): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/data/app/com.gsamlabs.xposed.mods.enablebatterystatspermission-1.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    E/Xposed  ( 3743):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    E/Xposed  ( 3743):      at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    E/Xposed  ( 3743):      ... 9 more
    E/Xposed  ( 3743):      Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.android.server.am.BatteryStatsService" on path: DexPathList[[zip file "/system/framework/XposedBridge.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    E/Xposed  ( 3743):              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    E/Xposed  ( 3743):              at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
    E/Xposed  ( 3743):              ... 10 more
    E/Xposed  ( 3743):              Suppressed: java.lang.ClassNotFoundException: com.android.server.am.BatteryStatsService
    E/Xposed  ( 3743):                      at java.lang.Class.classForName(Native Method)
    E/Xposed  ( 3743):                      at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    E/Xposed  ( 3743):                      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
    E/Xposed  ( 3743):                      at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
    E/Xposed  ( 3743):                      ... 11 more
    E/Xposed  ( 3743):              Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
    1
    Xposed doesn't work with Kit Kat.
    This is useless and misleading.
    Change the title.

    Sent from my Nexus 4 using xda app-developers app