Closed beeshyams closed 2 years ago
My bad.. Browsing through previous issues found the fix, which seems to work for now. In case it doesn't work over a period of time will add more details and re-open the issue
Fix adb shell settings put global hidden_api_policy 1
Sorry but re-opened it to note that even with this fix a) Kernel wake locks don't show b) widgets are broken (rooted stock Android 12, Pixel 4a)
Sorry but re-opened it to note that even with this fix a) Kernel wake locks don't show b) widgets are broken (rooted stock Android 12, Pixel 4a)
Can confirm on Pixel 6 / Android 12.
Sorry but re-opened it to note that even with this fix a) Kernel wake locks don't show b) widgets are broken (rooted stock Android 12, Pixel 4a)
ArrowOs 12 , Poco f3 has the same issue
what about executing
settings put global hidden_api_policy 1
via
Runtime.getRuntime().Exec()
directly from the app if needed on Android 12?
Well unfortunately that is not as simple as that: access to "global" settings requires the permission android.permission.INTERACT_ACROSS_USERS that is unfortunately reserved for system apps. On rooted devices it's not an issue but on unrooted I am still looking for ways to access and change that value. If you have an idea please feel free to submit it so that I can test
Have you tried that library?
https://github.com/LSPosed/AndroidHiddenApiBypass
No and I do not intend to; not because I am lazy but because of the amount of reflection code that I would need to reafactor. I am thinking about another approach but for now there are one or two adbc commands that need to be run. I think it's not a big deal since some permissions also need to be granted with ADB. On rooted devices BBS takes care of that of course
There are issues even with rooted device after upgrade to Android 12, when I try to get "partial wakelocks", with logcat:
Exception: java.lang.SecurityException: getPackagesForUid: UID 10283 requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS or android.permission.INTERACT_ACROSS_PROFILES to access user .
at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
at android.os.Parcel.createException(Parcel.java:2410)
at android.os.Parcel.readException(Parcel.java:2393)
at android.os.Parcel.readException(Parcel.java:2335)
at android.content.pm.IPackageManager$Stub$Proxy.getPackagesForUid(IPackageManager.java:5389)
at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1013)
at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1007)
at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:562)
at android.app.ApplicationPackageManager.getPackagesForUid(ApplicationPackageManager.java:1026)
at com.asksven.android.common.nameutils.UidNameResolver.getNameForUid(UidNameResolver.java:107)
at com.asksven.android.common.privateapiproxies.BatteryStatsProxy.getNetworkUsageStats(BatteryStatsProxy.java:3359)
at com.asksven.betterbatterystats.data.StatsProvider.getCurrentNetworkUsageStatList(StatsProvider.java:1387)
at com.asksven.betterbatterystats.data.StatsProvider.populateReference(StatsProvider.java:2709)
at com.asksven.betterbatterystats.data.StatsProvider.setCustomReference(StatsProvider.java:2484)
at com.asksven.betterbatterystats.services.WriteCustomReferenceService.onHandleIntent(WriteCustomReferenceService.java:51)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:78)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.pm.PackageManagerService$ComputerEngine.enforceCrossUserOrProfilePermission(PackageManagerService.java:4635)
at com.android.server.pm.PackageManagerService$ComputerTracker.enforceCrossUserOrProfilePermission(PackageManagerService.java:5898)
at com.android.server.pm.PackageManagerService.enforceCrossUserOrProfilePermission(PackageManagerService.java:12623)
at com.android.server.pm.PackageManagerService.getPackagesForUid(PackageManagerService.java:10385)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2241)
followed by
Exception: com.asksven.android.common.privateapiproxies.BatteryInfoUnavailableException
at com.asksven.android.common.privateapiproxies.BatteryStatsProxy.getSensorStats(BatteryStatsProxy.java:1746)
at com.asksven.betterbatterystats.data.StatsProvider.getCurrentSensorStatList(StatsProvider.java:614)
at com.asksven.betterbatterystats.data.StatsProvider.populateReference(StatsProvider.java:2729)
at com.asksven.betterbatterystats.data.StatsProvider.setCustomReference(StatsProvider.java:2484)
at com.asksven.betterbatterystats.services.WriteCustomReferenceService.onHandleIntent(WriteCustomReferenceService.java:51)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:78)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.os.HandlerThread.run(HandlerThread.java:67)
Can confirm that on non-rooted Galaxy S10e, Android 12 with work profile enabled. Seems like it needs some additional permissions to look into work profile's activity. Tried to give them through ADB to BBS itself and to PIDs mentioned by my logcat (12228 and 10003 - couldn't trace them afterwards anyway, like ADB couldn't get work profile apps' PIDs) - no results. Other permissions asked by BBS are already given to it. Any ideas how to solve it other than dropping work profile. Maybe at least I can make BBS think there's no any other profile somehow?
Logcat piece:
FATAL EXCEPTION: main
Process: com.asksven.betterbatterystats_xdaedition, PID: 12228
java.lang.SecurityException: getPackagesForUid: UID 10003 requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS or android.permission.INTERACT_ACROSS_PROFILES to access user .
at android.os.Parcel.createExceptionOrNull(Parcel.java:2437)
at android.os.Parcel.createException(Parcel.java:2421)
at android.os.Parcel.readException(Parcel.java:2404)
at android.os.Parcel.readException(Parcel.java:2346)
at android.content.pm.IPackageManager$Stub$Proxy.getPackagesForUid(IPackageManager.java:5884)
at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1085)
at android.app.ApplicationPackageManager$3.recompute(ApplicationPackageManager.java:1079)
at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:562)
at android.app.ApplicationPackageManager.getPackagesForUid(ApplicationPackageManager.java:1098)
at com.asksven.android.common.nameutils.UidNameResolver.getNameForUid(UidNameResolver.java:107)
at com.asksven.android.common.privateapiproxies.StatElement.getFullQualifiedName(StatElement.java:88)
at com.asksven.android.common.privateapiproxies.StatElement.getFqn(StatElement.java:112)
at com.asksven.betterbatterystats.adapters.StatsAdapter.getView(StatsAdapter.java:231)
at android.widget.AbsListView.obtainView(AbsListView.java:2617)
at android.widget.ListView.makeAndAddView(ListView.java:2224)
at android.widget.ListView.fillDown(ListView.java:826)
at android.widget.ListView.fillFromTop(ListView.java:888)
at android.widget.ListView.layoutChildren(ListView.java:1960)
at android.widget.AbsListView.onLayout(AbsListView.java:2393)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:689)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:1290)
at android.view.View.layout(View.java:24456)
at android.view.ViewGroup.layout(ViewGroup.java:7412)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:4504)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3926)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2832)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10332)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1063)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1048)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8633)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.pm.PackageManagerService$ComputerEngine.enforceCrossUserOrProfilePermission(PackageManagerService.java:5253)
at com.android.server.pm.PackageManagerService$ComputerTracker.enforceCrossUserOrProfilePermission(PackageManagerService.java:6246)
at com.android.server.pm.PackageManagerService.enforceCrossUserOrProfilePermission(PackageManagerService.java:14061)
at com.android.server.pm.PackageManagerService.getPackagesForUid(PackageManagerService.java:11334)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2453)
Can confirm that on non-rooted Galaxy S10e, Android 12 with work profile enabled. Seems like it needs some additional permissions to look into work profile's activity. Tried to give them through ADB to BBS itself and to PIDs mentioned by my logcat (12228 and 10003 - couldn't trace them afterwards anyway, like ADB couldn't get work profile apps' PIDs) - no results. Other permissions asked by BBS are already given to it. Any ideas how to solve it other than dropping work profile. Maybe at least I can make BBS think there's no any other profile somehow?
If I am not mistaken, this is not necessarily a consequence of work profiles. I am able to reproduce this on a device without work profile (under LineageOS MicroG).
I am thinking about another approach but for now there are one or two adbc commands that need to be run.
Hi @asksven Can you please list the commands to run?
Cycled through various versions. Doesn't work. Same confirmed by users on XDA thread
Likely error on Android 12![Screenshot_20211107-165304](https://user-images.githubusercontent.com/22980446/140642997-e0911182-c29a-4369-bb57-d72ff5295f04.png)