Related
I saw something in my logcat about "Flurry Agent" sending out data to its server. It looks like it collects analytics about certain apps and uploads it.
Does anyone know how to remove/disable this?
A hosts file addition is one way.
Some google search results:
Flurry-Legal
flurry-legal-dcma
Comes with Locale. (I don't have locale installed anymore, yet Flurry was running)
A search on my phone turned up nothing. It may be a library inside an apk.
find / -name "*lurry*"
I've added these line to my hosts file ( /etc/hosts )
127.0.0.1 data.flurry.com
127.0.0.1 flurry.com
127.0.0.1 dev.flurry.com
The below data shows up on the dashboard once flury is added to an app.
Application The name of the application.
New Users The number of new users who used the application for the first time during the specified time period.
Active Users The number of unique users who used the application during the last complete week of the specified time period.
Sessions The total number of user sessions that occurred during the specified time period.
Weekly Growth The percentage increase of new users between the last two complete weeks of the specified time period.
User Retention The percent of users that signed up during the time period have used the app during the last 7 days before today.
Click to expand...
Click to collapse
Also:
Device Model,
Firmware,
Carrier,
Location,
Errors and Exceptions,
Custom 'Events'.
Omg man i just noticed the same thing and was about to post!! I have no idea what app it is though because I don't have locale installed
It could be inside any app you have. Flurry is a company that collect statistics on app usage afaik and developers add the library to their apps. Don't know how widespread it is for developers to do this though.
SBS_ said:
It could be inside any app you have. Flurry is a company that collect statistics on app usage afaik and developers add the library to their apps. Don't know how widespread it is for developers to do this though.
Click to expand...
Click to collapse
Yes I figured that out and even downloaded the sdk.
Found out that BetterTermEmulator pro uses this and sends an error report whenever it crashes.
Code:
I/BetterTermEmulator( 3440): Command: '/system/bin/sh logcat'
I/BetterTermEmulator( 3440): chdir() to '/'
I/BetterTermEmulator( 3440): title is: 'BTEP'
I/BetterTermEmulator( 3440): Starting subprocess '/system/bin/sh logcat null'
I/BetterTermEmulator( 3440): waiting for: 463
D/FlurryAgent( 3440): Starting new session
D/NetworkLocationProvider( 141): addListener(): com.magicandroidapps.bettertermpro
D/NetworkLocationProvider( 141): setMinTime: 0
D/WifiService( 141): acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 [email protected]}
D/FlurryAgent( 3440): Sending report to: http://data.flurry.com/aar.do
I/BetterTermEmulator( 3440): Subprocess exited: 2
I/NotificationService( 141): enqueueToast pkg=com.magicandroidapps.bettertermpro [email protected] duration=0
I/BetterTermEmulator( 3440): Subprocesses exited with code 2
E/BetterTermEmulator( 3440): onSizeChanged: W:480 H:762old W:0H:0
D/FlurryAgent( 3440): Ending session
D/LocationManager( 3440): removeUpdates: listener = [email protected]
D/NetworkLocationProvider( 141): removeListener(): com.magicandroidapps.bettertermpro
I use the custom hosts file found over in android app, gonna have to open that up and addd them in if its not already there.
I just noticed this too while working with the Eclipse IDE DDMS and logcat views. Edited my /etc/hosts as well.
for info: the AdFree application is adding these lines to the hosts file
I know quite a few users round here use Dropsync. Did you do something special to get it to work?
I've definitely got a working wireless connection, have got my account connected correctly (can find the folder to sync with), but when I hit "sync now" it spins for less than a second and then drops back to status: IDLE. With nothing having updated.
I've made all the settings as unrestrictive as possible (I think) and my battery is 90%.
I use this app fine on my phone, so I can't think what's wrong with it.
I've tried using something else -- "Real sync" -- but that is terrible. Can't do version control properly and creates a huge number of conflicts (including directories that are in fact identical).
If I can't get anywhere with Dropsync, does anyone have recommendations for what works on the Nook: Wuala, Ubuntu One, or anything else (must have linux client)? [Ubuntu One also used to create masses of conflicts back in the day, but I'm hoping that is fixed now]
Fixed: device was full
If anyone else has this problem, have sense to check "Sync History". And if it says "your device storage is almost full" then maybe you should delete something and try again.
I would mark this thread as "solved" but apparently that's something else I'm too stupid to do.
Next problem: how to get the phone to accept the 32gb sd card without crashing, so that the nook can have the phone's 16gb sd card.... (there have been many attempts at this game already).
How about a fix for a device which is not full?
My entire sync history states: "autosync started... sync interrupted... autosync started... sync interrupted..."
I have discovered another error source:
I had the problem that Dropsync would start syncing, but somehow never complete the sync and would say something like "Conditions for autosync not met."
I discovered the reason was that in the settings there was the setting to sync only if battery is more than 80% full (I think that is the default setting). It would happen that the sync would "wear" out the battery enough to drop below 80, and then the sync would stop.
This way I only got working sync while charging. It took me a while to see that pattern, so maybe this note can help some other people.
trebuchet76 said:
How about a fix for a device which is not full?
My entire sync history states: "autosync started... sync interrupted... autosync started... sync interrupted..."
Click to expand...
Click to collapse
I got the same thing the fixed it with uninstall and clean the app data then reinstall it.
tuangd said:
I got the same thing the fixed it with uninstall and clean the app data then reinstall it.
Click to expand...
Click to collapse
After that app works properly, without issues?
Try Dropsync 1.68 instead of newest version
tl;dr: Try dropsync pro 1.68 apk
So I've done a lot of troubleshooting this app over the last couple weeks since I flattened and re-rooted my NST. I as well was getting tons of "sync interrupted" and the sync just going to IDLE state shortly after starting a manual sync (mind you this is without Autosync even being in play). I would run the manual sync over and over and maybe get three or four files to download before it crapped out.
This was frustrating to me since I had this app working PERFECTLY for the last year and a half before re-rooting.
So.... in an act of desperation I tried out an old version of Dropsync that seemed to be from about the time that I had rooted and installed before. In this case I tried the 1.68 APK which was one of the last ones before he jumped up to 2.x version numbers.
In the first couple of days since installing this version it seems to be rock solid again. I don't need any of the additional features - just downloading my Calibre files on demand when I need them.
Do a web search for 1.68 or another version and sideload it to see if it helps out.
For reference, here is the main excpetion I was getting in the log file (when I could get the damn log file to show up)
[2013-07-16 09:45:38-0500] [3874] [W] Exception
c.t.ds.ap: java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (external/openssl/ssl/s3_pkt.c:284 0xaf58a08b:0x00000000)
Similar probs, using Dropsync Free
I'm experiencing the same problem with my NST. I even contacted the software's author. He looked at the log and advised that the problem was with dropped connection. Given that the problem exists on all three connections I have tried (work, home and using my phone as WiFi relay), I was inclined to think that the problem lay with the device's wifi, maybe dropping packets and making dropsync think that there's no connection. Does anyone know how to do a ping from this device?
Since NST's in the UK were on an amazing special offer of £30 (around $48), I bought a spare, and I have the same issues on that!
Someone here suggested uninstalling, clearing the app's data and reinstalling -- what data do you suggest I remove? I use Relaunch as a file browser, have searched for anything with dropsync. It came up with two files (I forget the locations) and one of them, was the log file that is only generated if selected in the app's menu...
Will report back if un-re works.
---------- Post added at 11:26 PM ---------- Previous post was at 10:51 PM ----------
Uninstall reinstall, no different.
Changed folders I was syncing to include only two new files, to a new location on the Nook. Attempted to sync the approx 2MB. Synced fine!! Changed settings back to the folders I was trying to sync, a total of 471 files in 170 folders. Ran for 93 seconds while it analysed I estimate about 80% of my folders, then threw the towel in without getting to the one new file I wanted it to sync.
Conclusion -- the device's WiFi is a bit intermittent or the software is flakey on this device (suspect the latter).
Might invite the author to check this post.
Pertinent part of the log file (I suspect)
java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (external/openssl/ssl/s3_pkt.c:284 0xaf58a08b:0x00000000)
at c.t.ds.ad.a(SourceFile:653)
at c.t.ds.ad.a(SourceFile:145)
at c.t.ds.an.a(SourceFile:69)
at c.t.ds.an.b(SourceFile:64)
at com.ttxapps.dropsync.m.a(SourceFile:1354)
at com.ttxapps.dropsync.m.b(SourceFile:1259)
at com.ttxapps.dropsync.m.b(SourceFile:115)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.a(SourceFile:73)
at com.ttxapps.dropsync.SyncService.a(SourceFile:383)
at com.ttxapps.dropsync.SyncService.onHandleIntent(SourceFile:152)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:30)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
Caused by: java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (external/openssl/ssl/s3_pkt.c:284 0xaf58a08b:0x00000000)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:305)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:321)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:129)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at c.t.ds.ad.a(SourceFile:563)
at c.t.ds.ad.a(SourceFile:651)
... 16 more
[2013-09-16 00:15:03+0100] [1906] (90186 ms) Processed /sdcard/My Files <=> /Nook
[2013-09-16 00:15:03+0100] [1906] Closing /sdcard/My Files/.dropsync
[2013-09-16 00:15:03+0100] [1906] [D] File CLOSE_WRITE(0x8) /sdcard/My Files/.dropsync
[2013-09-16 00:15:03+0100] [1906] [W] Sync failed with exception:
c.t.ds.ap: java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (external/openssl/ssl/s3_pkt.c:284 0xaf58a08b:0x00000000)
at c.t.ds.ad.a(SourceFile:653)
at c.t.ds.ad.a(SourceFile:145)
at c.t.ds.an.a(SourceFile:69)
at c.t.ds.an.b(SourceFile:64)
at com.ttxapps.dropsync.m.a(SourceFile:1354)
at com.ttxapps.dropsync.m.b(SourceFile:1259)
at com.ttxapps.dropsync.m.b(SourceFile:115)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.b(SourceFile:175)
at com.ttxapps.dropsync.m.a(SourceFile:73)
at com.ttxapps.dropsync.SyncService.a(SourceFile:383)
at com.ttxapps.dropsync.SyncService.onHandleIntent(SourceFile:152)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:30)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
Caused by: java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (external/openssl/ssl/s3_pkt.c:284 0xaf58a08b:0x00000000)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:305)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:321)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:129)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at c.t.ds.ad.a(SourceFile:563)
at c.t.ds.ad.a(SourceFile:651)
... 16 more
[2013-09-16 00:15:03+0100] [1906] Sync finished in 93 seconds
[2013-09-16 00:15:03+0100] [1906] 0 change(s) detected and synced
[2013-09-16 00:15:03+0100] [1906] [V] (10) INSERT 2013-09-16 00:15:03 Sync interrupted
[2013-09-16 00:15:03+0100] [1906] --- Sync failed, duration 93 seconds
[2013-09-16 00:15:03+0100] [1906]
Hi folks...
I am using a T-Mo Galaxy Note 3 with 4.3 (jellybean) and the latest Xposed Framework 2.7.1 (for reference, I did also try 2.4 through 2.5.1, with the same results).
I have installed the "Good for Enterprise" application to access my organization's email system. Our policy does NOT restrict use of root, so my issue is NOT with the fact that I am rooted.
However, whenever I enable the framework, even with NO modules enabled, launching Good crashes the app right after I enter my password into it. This is 100% repeatable. If I disable Xposed and reboot, Good works perfectly. This is also 100% repeatable.
I have looked through the logcat output and don't know what to look for, as I see a good amount of recurring debug messages. Any suggestions for how to proceed? Also, is it possible to blacklist an application so Xposed does not try to hook only that app?
Any suggestions are appreciated, and please remember that my organization does NOT restrict root via Good policy, so I don't have to worry about RootCloak, etc.
Thanks folks!
- SG
Xposed Framework Causes Good Mobile Messaging to not function
Hey there, not sure if there is anything that you can do about this but I wanted your input:
For some reason when I activate the xposed installer framework (my Verizon HTC One Max is running the most recent version of the NuSenseSix rom), it causes an app I have installed called "Good for Enterprise" to stop functioning. (Good for Enterprise is used for corporate email). if I disable the framework, then the app functions normally. Is there any way you can give me some advice or a resolution regarding this? the framework version I am running is 2.6.1
Thanks,
Slappy_G said:
Hi folks...
I am using a T-Mo Galaxy Note 3 with 4.3 (jellybean) and the latest Xposed Framework 2.7.1 (for reference, I did also try 2.4 through 2.5.1, with the same results).
I have installed the "Good for Enterprise" application to access my organization's email system. Our policy does NOT restrict use of root, so my issue is NOT with the fact that I am rooted.
However, whenever I enable the framework, even with NO modules enabled, launching Good crashes the app right after I enter my password into it. This is 100% repeatable. If I disable Xposed and reboot, Good works perfectly. This is also 100% repeatable.
I have looked through the logcat output and don't know what to look for, as I see a good amount of recurring debug messages. Any suggestions for how to proceed? Also, is it possible to blacklist an application so Xposed does not try to hook only that app?
Any suggestions are appreciated, and please remember that my organization does NOT restrict root via Good policy, so I don't have to worry about RootCloak, etc.
Thanks folks!
- SG
Click to expand...
Click to collapse
I am experiencing the exact same issue with good and my device. If I keep the framework disabled, good for enterprise works perfectly. As soon as I enable the framework and reboot, good hangs every time when attempting to connect after putting in my password and then just force quits back to the home screen.
I opened a seperate thread regarding the issue not seeing this thread until after I had already posted. I am hopeful that a resolution can be found. I have a Verizon HTC One Max, rooted with NuSenseSix Rom. I have also verified that they do not block access to good when it detects a rooted device. And as stated before, it functions normally on my rooted device as long as I keep the framework disabled.
Please describe in detail what you mean with "stop functioning". Does it crash? Please provide a logcat of the error.
I have merged these two threads. As mentioned, please post a logcat. A blacklist to avoid "loading" Xposed is not possible, because Xposed is initialized at system start and "inherited" by all apps.
rovo89 said:
I have merged these two threads. As mentioned, please post a logcat. A blacklist to avoid "loading" Xposed is not possible, because Xposed is initialized at system start and "inherited" by all apps.
Click to expand...
Click to collapse
Understood. I'll post a logcat this evening of both a positive and a negative case.
I am experiencing the excact same behaviour as stated in the OP, and are working under the same conditions (rooted rom with latest xposed and NO anti-root policy). I would LOVE to help providing logcats, and i happen to be part of the IT department enforcing Good, so i can really test this (they wont blacklist me).
I will produce som logcat for you, any advice on how to best do this? Otherwise i will just throw something at best effort :good: :laugh:
Update: Back with a log, see attatched.
I started Catlog (app), pressed home and launched GFE. I then entered my password, and the app crashed. After this i clicked the shortcut on my launcher to start (resume) catlog, and paused the logging. I then exported the whole thing to the attatched textfile. The loglevel is Verbose.
If any system information is needed, other than those in the log file, please ask.
Kind Regards
TwinAdk
Thanks. I don't see any crash/exception of the application there. Is it a normal crash ("<app> has stopped working" or whatever that message says)? If so, can you get the stack trace from it?
But what I noticed is that you have at least one module with quite verbose output (all those lines with "Xposed" tag, they don't come from the framework). Could you please make sure that it crashes even without any active modules?
rovo89 said:
Thanks. I don't see any crash/exception of the application there. Is it a normal crash ("<app> has stopped working" or whatever that message says)? If so, can you get the stack trace from it?
But what I noticed is that you have at least one module with quite verbose output (all those lines with "Xposed" tag, they don't come from the framework). Could you please make sure that it crashes even without any active modules?
Click to expand...
Click to collapse
I will deactivate all modules and re-take the log. It still crashes, that's for sure. When i will screen record the crash, it's not a stopped working crash, the app just closes with it's 'switch to launcher animation'. Once reopened it loads from scratch.
---------- Post added at 11:23 PM ---------- Previous post was at 10:32 PM ----------
Back with log of crash two times in a row, and screen record of working and failing good app. Notice that good cannot he screen recorded, hence the black screen when I'm inside the app. After the working recording I enabled xposed framework and rebooted.
Video and log here:
https://www.dropbox.com/sh/zrkivu9u0k4u2od/AAA5io6UfphGumblJCduRp8da
When you got the files, tell me, I'll remove them from dropbox then.
Kind Regards
TwinAdk
Twin, thanks for uploading the log files and the sharing the videos. i've been super busy and haven't had a chance to do this. what you are showing in your videos is exactly what is happening on my device when the framework is enabled (with no modules enabled/loaded). good prompts for my password and then force quits back to the home screen. it does this over and over again until I disable the framework and restart my device. then good functions normally.
Rovo, let me know if you need me to also supply logs from my device, or if what twin provided is enough to troubleshoot this.
thanks,
No problem, i know that far too well The phone having the problem is a HTC One, m7_ul, running the AICP project rom from here: http://forum.xda-developers.com/showthread.php?t=2632667
I also have an Samsung xCover 2 i can test it on (the wifes) and the former phone, the HTC One X, running a similair AICP rom, in a slightly older version. If this has any intereset, let me know. It would
Also, it occured to me, the Good app also hangs during the initial setup of Good (you have to pair the Good app with your company, by entereing your email address and a one-time key. This is done upon starting the app for the first time).. It has a process where it, after the email and onetime key is submitted, will "log in" - "check stuff" [NOT root policies etc i believe] - "preforms the secure connection" [between phone and company] - "fetches corporate settings" (this is the step where it freezes with XPosed enabled, hence never allowing the initial setup to complete) - "saving settings" [initial setup done, the app loads, if no xposed is present].
Are you interested in a logcat of that process aswell? I am quite sure its the same thing stopping the app from working.
Kind Regards
TwinAdk
EDIT: I just realised the video of the Good app working, was unable to play anywhere else than on my phone, so i screenrecorded it playing on my phone, and posted the screenrecord of a screenrecord to dropbox
you are correct, if i uninstall good and attempt to reinstall while the framework is enabled, it hangs on "retrieving corporate settings". If i disable the framework and reinstall, installation completes with no issues and functions normally. Again this is just enabling the framework on my device, not loading or enabling any modules. I am using a verizon htc one max running rooted nusensesix rom
TwinAdk said:
Video and log here:
https://www.dropbox.com/sh/zrkivu9u0k4u2od/AAA5io6UfphGumblJCduRp8da
When you got the files, tell me, I'll remove them from dropbox then.
Click to expand...
Click to collapse
Thanks, you can remove them.
This isn't a crash - the app deliberatly goes back to the launcher:
Code:
07-16 22:53:08.172 I/ActivityManager(585): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.good.android.gfe/com.good.android.ui.LaunchHomeActivity bnds=[540,960][540,960]} from pid 1068
07-16 22:53:08.312 I/ActivityManager(585): Start proc com.good.android.gfe for activity com.good.android.gfe/com.good.android.ui.LaunchHomeActivity: pid=4604 uid=10161 gids={50161, 3003, 1028, 1015, 1023, 1006}
07-16 22:53:08.943 W/ActivityManager(585): Unable to start service Intent { cmp=com.dell.enterpriseservices/.EnterpriseService } U=0: not found
07-16 22:53:09.633 I/WindowManager(585): Screenshot max retries 4 of Token{41ca04d8 ActivityRecord{41ab9a78 u0 com.good.android.gfe/com.good.android.ui.LaunchHomeActivity t5 f}} appWin=Window{41d18a68 u0 Starting com.good.android.gfe} drawState=4
07-16 22:53:09.643 W/WindowManager(585): Screenshot failure taking screenshot for (1080x1920) to layer 21015
07-16 22:53:09.653 I/ActivityManager(585): START u0 {cmp=com.good.android.gfe/com.good.android.ui.activities.AppLockActivity (has extras)} from pid 4604
07-16 22:53:09.663 W/ActivityManager(585): startActivity called from finishing ActivityRecord{41ab9a78 u0 com.good.android.gfe/com.good.android.ui.LaunchHomeActivity t5 f}; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.good.android.gfe/com.good.android.ui.activities.AppLockActivity (has extras) }
...
[B][COLOR="Red"]07-16 22:53:22.687 I/ActivityManager(585): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.teslacoilsw.launcher/com.android.launcher2.Launcher} from pid 4604[/COLOR][/B]
...
07-16 22:53:23.208 I/ActivityManager(585): Process com.good.android.gfe (pid 4604) has died.
07-16 22:53:23.208 I/WindowState(585): WIN DEATH: Window{41f2c360 u0 com.good.android.gfe/com.good.android.ui.activities.AppLockActivity}
I have decompiled the app and it indeed has code for that. Unfortunately, they have used Proguard to obfuscate the code, so it's very hard to understand why exactly they show the launcher. Maybe they have detected Xposed or something done by it, or it caused an unexpected situation.
You could try one more thing - disable the Xposed resources APIs in the installer settings and reboot. That disables a good part of Xposed. If that doesn't help, someone would need to analyse the app in detail. I'm saying "someone" because I don't have enough free time for that.
rovo89 said:
Thanks, you can remove them.
This isn't a crash - the app deliberatly goes back to the launcher:
Code:
07-16 22:53:08.172 I/ActivityManager(585): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.good.android.gfe/com.good.android.ui.LaunchHomeActivity bnds=[540,960][540,960]} from pid 1068
07-16 22:53:08.312 I/ActivityManager(585): Start proc com.good.android.gfe for activity com.good.android.gfe/com.good.android.ui.LaunchHomeActivity: pid=4604 uid=10161 gids={50161, 3003, 1028, 1015, 1023, 1006}
07-16 22:53:08.943 W/ActivityManager(585): Unable to start service Intent { cmp=com.dell.enterpriseservices/.EnterpriseService } U=0: not found
07-16 22:53:09.633 I/WindowManager(585): Screenshot max retries 4 of Token{41ca04d8 ActivityRecord{41ab9a78 u0 com.good.android.gfe/com.good.android.ui.LaunchHomeActivity t5 f}} appWin=Window{41d18a68 u0 Starting com.good.android.gfe} drawState=4
07-16 22:53:09.643 W/WindowManager(585): Screenshot failure taking screenshot for (1080x1920) to layer 21015
07-16 22:53:09.653 I/ActivityManager(585): START u0 {cmp=com.good.android.gfe/com.good.android.ui.activities.AppLockActivity (has extras)} from pid 4604
07-16 22:53:09.663 W/ActivityManager(585): startActivity called from finishing ActivityRecord{41ab9a78 u0 com.good.android.gfe/com.good.android.ui.LaunchHomeActivity t5 f}; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.good.android.gfe/com.good.android.ui.activities.AppLockActivity (has extras) }
...
[B][COLOR="Red"]07-16 22:53:22.687 I/ActivityManager(585): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.teslacoilsw.launcher/com.android.launcher2.Launcher} from pid 4604[/COLOR][/B]
...
07-16 22:53:23.208 I/ActivityManager(585): Process com.good.android.gfe (pid 4604) has died.
07-16 22:53:23.208 I/WindowState(585): WIN DEATH: Window{41f2c360 u0 com.good.android.gfe/com.good.android.ui.activities.AppLockActivity}
I have decompiled the app and it indeed has code for that. Unfortunately, they have used Proguard to obfuscate the code, so it's very hard to understand why exactly they show the launcher. Maybe they have detected Xposed or something done by it, or it caused an unexpected situation.
You could try one more thing - disable the Xposed resources APIs in the installer settings and reboot. That disables a good part of Xposed. If that doesn't help, someone would need to analyse the app in detail. I'm saying "someone" because I don't have enough free time for that.
Click to expand...
Click to collapse
See the dropbox folder. I ticked the option and rebooted, then I had same experience and found the shown in the logcat....
Mornig,
I just noticed that i get a notification from Good, saying that "GFE does not have connection [to the corporate network]. Unlock GFE to initiate the connection". See the screenshot (_20140718_072316.JPG) posted in the dropbox folder. I received this while GFE was unable to open, and it confirms that GFE is indeed running in the background..
I tried to rename the Xposed app in the phone, to test, using xSuite (weak attempt, but you never know). Also, i stripped GFE of some permissions using the App Settings module:
- Read External storage
- Read Logs
- com.dell.enterpriseservices.SET_PROPERTY_THIRDPARTY_APPINSTALL (custom GFE permission added to the manifest i belive). Possibly a permission used for corporate inforced rules (that do not apply here yet, but i still nuked it)
I will try stripping permissions to see where it gets me.
Also, there is this module, - http://repo.xposed.info/module/com.phantasm.xposed.gfesecuritypatcher - but it does not work for me at least.
Then there is this thread - http://forum.xda-developers.com/showthread.php?t=2040163 - but the "4.3+ xposed way" mentioned in the very first post, is also no good...
I also tested the rootcloak app, where the developer says it may work with GFE, but he needs more testing. It does not.
I fear however, that all these past efforts have been nullified by some recent GFE update, because the case here is that we dont even get to start the program.
Kind Regards
TwinAdk
EDIT: Okay, that was quick.. I stripped GFE of EVERY SINGLE permission. This caused it to FC on me the first time. The dump report revealed it needed the WAKE_LOCK permission, so i granted it that and retried.. On the second launch, it returned to my launcher as we have seen before...
In fact, i find this behaviour unacceptable, as my company has NOT decided against Xposed, rooting, etc, and a company could for all we know depend on both GFE and Xposed (unlikely, yes, impossible, no). But GFE seems to be dead set against opening up when Xposed is active.
Would it be possible to intercept and block the return to launcher call to android? Just to see where it gets us? This would require a module, i know.
---------- Post added at 08:32 AM ---------- Previous post was at 07:36 AM ----------
Okay, i read up on another thread, and found this post here: http://forum.xda-developers.com/showpost.php?p=53198439&postcount=833
It states the following:
Information Notification: Good for Enterprise (GFE) Good Mobile Messaging Client (GMMC) for Android v2.5 running Android OS v4.4.2 May Encounter Application Restarts After Entering the Password on the Nexus 4 and Nexus 5 Device
Date: June 3, 2014
Problem:
Good for Enterprise (GFE) Good Mobile Messaging Client (GMMC) for Android version 2.5 running Android OS 4.4.2 may encounter application restarts after entering the password on the Nexus 4 and Nexus 5 Device. This problem has occurred after upgrading from GMMC for Android version 2.4 to GMMC for Android version 2.5 and with doing a fresh installation of GMMC for Android version 2.5.
Environment:
· Good for Enterprise (GFE) Good Mobile Messaging Client (GMMC) for Android version 2.5
· Nexus 4 and Nexus 5 devices with Android OS 4.4.2
Please Note:
A re-install of the GFE GMMC Android version 2.5 will not resolve the problem.
Workaround:
Please install the older version of Good for Enterprise (GFE) Good Mobile Messaging Client (GMMC) for Android version 2.4 on your device and disable the auto update setting for this application.
· Here is the link to get the GFE for Android 2.4 release - https://get.good.com/ea/android/
· It's very important to disable the auto update for the application, so it does not auto update to GFE version 2.5.
o Open the Google Play Store
o Hit Menu (3 dots in the upper right)
o Select Settings
o Uncheck 'Auto-update' apps
FIX:
Good Engineering is currently working on a permanent fix for this issue. We will keep you updated on the availability of the new software version.
If you have questions, please contact our technical support team at 1-408-352-7100, 1-866-448-8458 or submit an online support ticket at www.good.com/gmp.
Thank you,
Click to expand...
Click to collapse
Provided this information, i downloaded the 2.4 release of GFE, instead of the 2.5 from Google Play Store - and it just works.
After uninstalling 2.5, rebooting and installing 2.4, i can open up GFE with Xposed fully enabled. I also have the GFE Patcher module (http://repo.xposed.info/module/com.phantasm.xposed.gfesecuritypatcher) installed, just in case.. even though my company does not block root.
Summa summarum - It seems we can call off the witch hunt, and conclude that its a bug in 2.5 of GFE causing the issues.
Also, the GFE Patch module seems to work for people with root, and in the thread where i found the bug-info, people are reporting that 2.5 of GFE works, when installed on top of 2.4, via playstore. This is however not the case for me, 2.5 still returns to launcher.
@revo89, thank you for all your time and effort in this matter, and once again, thank you for the xposed framework as a whole, its is a truly amazing piece of art, and my phone is not my phone without it! :good::good:
@twin
You are absolutely correct buddy. After reading your recent update to this thread, I removed and reinstalled w/ GFE 2.4 via the link you provided. that took care of my issue. I can use GFE 2.4 with the framework & modules enabled with no issues. as soon as I upgrade again to 2.5, I start experiencing the same issue as before where it force quits back to the home screen. for now I will use 2.4 until a newer version of GFE is released and will test again with that version. but at least now I have a working solution to the issue.
thanks again for all your time and assistance in troubleshooting this problem.
Thanks so much everyone for working on this thread. I run xposed on a Verizon note2 and I have been having this same issue described here. Its been driving me crazy and I've had to live without xposed since this 'bug' arrived. I'll try 2.4 as well and then wait for GFE to fix the newer versions. Thanks again.
I had this issue.. It's rom dependant.
I had one rom on my Note2 that had this issue. But a rooted stock rom does not have this issue.
I'm running a HTC One M8 as of today. It's got rooted stock, it also does not have this issue.
Hope that helps (but yeah 2.4 works, I kept a backup in titanium)
Indeed, it seems that the rom makes a difference, because some people say it works (2.5), and some doesnt.. Must be parts of the rom that is the issue, and that part is used only in some roms
Kind Regards
TwinAdk
Awesome, this thread was a lifesaver! I couldn't figure out why and kept reinstalling and on the phone with tech support at my company who basically told me to do a hard reset (right....). The older version 2.4 works fine. Thanks TwinAdk!
Hello,
I'm trying to develop an Xposed module that will allow me to change the carrier text of the device on demand (in reality, this will happen when the music track is changed).
I'm already using a BroadcastReceiver to listen to track-changed events from various media players, but I want to change the carrier text of the device when I receive such an intent.
However, I wasn't able to find how to do it using Xposed, as it only allows me to hook methods before/after they execute (feel free to correct me if I'm wrong of course), which isn't exactly what I need.
I went through the source code of XBlastTools for changing the carrier text, but wasn't able to conclude much for my needs.
Please advise in setting up a method that will basically get a String and replace the carrier text with that given String (at any given time). Something like this:
Code:
public void setName(String name) {
// TODO implement
}
Normally, you'd put your BroadcastReceiver somewhere you can access the carrier TextView from. You'd then be able to edit it when you want normally. In this case it looks like there's an easier way, though.
Here's how I'd do it: register a BroadcastReceiver in CarrierText's constructor. In that receiver, get and save the text you want as a class variable. Then hook getCarrierTextForSimState and make it return that variable.
http://grepcode.com/file_/repositor...licy/impl/keyguard/CarrierText.java/?v=source
GermainZ said:
Normally, you'd put your BroadcastReceiver somewhere you can access the carrier TextView from. You'd then be able to edit it when you want normally. In this case it looks like there's an easier way, though.
Here's how I'd do it: register a BroadcastReceiver in CarrierText's constructor. In that receiver, get and save the text you want as a class variable. Then hook getCarrierTextForSimState and make it return that variable.
http://grepcode.com/file_/repositor...licy/impl/keyguard/CarrierText.java/?v=source
Click to expand...
Click to collapse
That's a good way of doing things if it weren't for the "on demand" requirement.
Basically, what I want to do is set the carrier text to a different one whenever the onReceive() of the BroadcastReceiver is called, so I can't just hook into getCarrierTextForSimState() and change that, because it probably won't be called whenever I need.
benthe said:
That's a good way of doing things if it weren't for the "on demand" requirement.
Basically, what I want to do is set the carrier text to a different one whenever the onReceive() of the BroadcastReceiver is called, so I can't just hook into getCarrierTextForSimState() and change that, because it probably won't be called whenever I need.
Click to expand...
Click to collapse
Then call the setText method from your receiver as well.
GermainZ said:
Then call the setText method from your receiver as well.
Click to expand...
Click to collapse
By the way, I think the class you linked to only affects the carrier name that appears on the lockscreen.
I'm not that interested in this carrier text to be honest, and basically want to set the carrier text whereever it may be the class you linked to is pulling it from.
The main idea behind my module is that I have a BT headset in my car that can only display the carrier name & bluetooth name of my phone, but I want it to display the currently playing track. So I want to change the bluetooth name of the phone to the artist of the currently playing song (almost works at this point, just have some crashes I need to deal with), and set the carrier name to the name of the song that's currently playing.
However, I didn't manage to do that later. I tried various methods, but no luck so far.
EDIT: I managed to get everything working for the most part (I didn't test it with the actual BT headset, but both the BT and carrier names change when changing tracks).
However, I'm getting 2 error messages constantly as soon as I start playback:
1. Unfortunately, the process android.process.acore has stopped.
2. Unfortunately, the process android.process.media has stopped.
Any ideas on how to fix those two? What's causing them seems to be the changing of the bluetooth name (although it does work, just shows me those two crash errors time after time). Here's the code for my bluetooth manager.
Disabling the "setName" call of the BluetoothAdapter fixes the crashes (but obviously doesn't change the BT name of the device, which defeats the purpose).
Also, replacing the said call with:
Code:
XposedHelpers.callMethod(mLocalAdapter, "setName", name);
fixes this, but I prefer to do things without using reflection and hooking if I can (which is possible in this case), so it seems like it's just a permission issue.
It might be because of a permission problem:
I put together a quick Android app to simulate changing the BT name in the same way, and it crashed without adding:
Code:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
to the manifest file.
However, if I recall correctly, Xposed modules run in root mode, so they shouldn't need permissions to do whatever they please. Also, I tried adding the above permissions to my module, but it still crashes.
Any help on the matter would be most appreciated.
I just checked which class XBlastTools hooked and assumed that's it. If not, look for the right one or see the first part of post #2.
About the crashes: check your logcat.
Xposed modules do not run as root, they'll have the same permissions as the process they're in (the app you're hooking). You can hook anything, though (including Android system methods).
GermainZ said:
I just checked which class XBlastTools hooked and assumed that's it. If not, look for the right one or see the first part of post #2.
About the crashes: check your logcat.
Xposed modules do not run as root, they'll have the same permissions as the process they're in (the app you're hooking). You can hook anything, though (including Android system methods).
Click to expand...
Click to collapse
Thanks for the help.
I got the carrier name part working perfectly now (or so it seems at least, I'll have to check later in the actual car BT headset).
The only part that remains to make the module fully functional is the Bluetooth one. I checked my logcat, and like I said in my previous post - I think it's a permission issue, which is rather weird - as I set both permissions needed for Bluetooth for the module. Keep in mind that the part that's running the bluetooth code in the app isn't hooking anything, it runs on the module itself as far as I can tell. I'm calling it on the onReceive callback from the BroadcastReceiver (I don't think the app that send the broadcast has bluetooth permissions, but that shouldn't matter, should it?).
benthe said:
Thanks for the help.
I got the carrier name part working perfectly now (or so it seems at least, I'll have to check later in the actual car BT headset).
The only part that remains to make the module fully functional is the Bluetooth one. I checked my logcat, and like I said in my previous post - I think it's a permission issue, which is rather weird - as I set both permissions needed for Bluetooth for the module. Keep in mind that the part that's running the bluetooth code in the app isn't hooking anything, it runs on the module itself as far as I can tell. I'm calling it on the onReceive callback from the BroadcastReceiver (I don't think the app that send the broadcast has bluetooth permissions, but that shouldn't matter, should it?).
Click to expand...
Click to collapse
Remember that all hooked code does *not* run as your app so your app's permissions don't matter here. Hooked code runs as if it was in the hooked process.
Can't say much else without the actual error.
GermainZ said:
Remember that all hooked code does *not* run as your app so your app's permissions don't matter here. Hooked code runs as if it was in the hooked process.
Can't say much else without the actual error.
Click to expand...
Click to collapse
But this code does run on the module.
In my main class (that implements IXposedHookLoadPackage), I'm initializing a class (that derives from Object, and doesn't implement any interfaces), in which I register the BroadcastReceiver (on the context of the application, via AndroidAppHelper.currentApplication().getApplicationContext()), when the onReceive() method is called in the BroadcastReceiver I call the setName() method of the BluetoothAdapter.
If it doesn't run on the module application, on what application does it run on?
And here's the error:
E/AndroidRuntime( 5063): FATAL EXCEPTION: main
E/AndroidRuntime( 5063): Process: com.maxmpz.audioplayer, PID: 5063
E/AndroidRuntime( 5063): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.maxmpz.audioplayer.TRACK_CHANGED flg=0x10 (has extras) } in com.bengr.MusicMetadataForLegacyDevices.Musi
[email protected]
E/AndroidRuntime( 5063): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:785)
E/AndroidRuntime( 5063): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime( 5063): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 5063): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 5063): at android.app.ActivityThread.main(ActivityThread.java:5144)
E/AndroidRuntime( 5063): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 5063): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 5063): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
E/AndroidRuntime( 5063): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
E/AndroidRuntime( 5063): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
E/AndroidRuntime( 5063): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 5063): Caused by: java.lang.SecurityException: Need BLUETOOTH ADMIN permission: Neither user 10128 nor current process has android.permission.BLUETOOTH_ADMIN.
E/AndroidRuntime( 5063): at android.os.Parcel.readException(Parcel.java:1465)
E/AndroidRuntime( 5063): at android.os.Parcel.readException(Parcel.java:1419)
E/AndroidRuntime( 5063): at android.bluetooth.IBluetooth$Stub$Proxy.setName(IBluetooth.java:783)
E/AndroidRuntime( 5063): at android.bluetooth.BluetoothAdapter.setName(BluetoothAdapter.java:660)
E/AndroidRuntime( 5063): at com.bengr.MusicMetadataForLegacyDevices.BluetoothManager.setName(BluetoothManager.java:50)
E/AndroidRuntime( 5063): at com.bengr.MusicMetadataForLegacyDevices.MusicListener.updateRemoteFieldsFromLocalFields(MusicListener.java:150)
E/AndroidRuntime( 5063): at com.bengr.MusicMetadataForLegacyDevices.MusicListener.setTrackMetadata(MusicListener.java:144)
E/AndroidRuntime( 5063): at com.bengr.MusicMetadataForLegacyDevices.MusicListener.access$4(MusicListener.java:138)
E/AndroidRuntime( 5063): at com.bengr.MusicMetadataForLegacyDevices.MusicListener$1.onReceive(MusicListener.java:105)
E/AndroidRuntime( 5063): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:775)
E/AndroidRuntime( 5063): ... 10 more
W/ActivityManager( 935): Force finishing activity com.maxmpz.audioplayer/.PlayerUIActivity
W/ActivityManager( 935): Force finishing activity com.maxmpz.audioplayer/.PlayListActivity
D/LogFetchServiceManager( 6618): Received entry added
W/ActivityManager( 935): Activity pause timeout for ActivityRecord{42d72640 u0 com.maxmpz.audioplayer/.PlayerUIActivity t4 f}
I/Timeline( 1490): Timeline: Activity_idle id: [email protected] time:183794
I/Timeline( 935): Timeline: Activity_windows_visible id: ActivityRecord{42ca81c8 u0 com.teslacoilsw.launcher/com.android.launcher2.Launcher t1} time:184001
W/System.err( 5009): LOG: Warning Unknown dock level ignored.
Click to expand...
Click to collapse
Also, here's the project (together with the PowerAMP API project, as it depends on it, and the Android tester application I made to simulate changing the bluetooth name on a "regular" project): link, if that's of any help.
I can't check the project right now, but just to make sure I understand correctly, you're doing something like this:
1- You're hooking the class in which the carrier text is set and registering a BroadcastReceiver there.
2- From your app, you're sending a broadcast whenever you want (possibly with the text you want in the extras).
3- In the BroadcastReceiver's onReceive method, you're setting the carrier text to the value you just received.
If that's what you're doing, it seems fine to me. For the permissions issue, I suppose adding the required permission to your manifest will fix that.
GermainZ said:
I can't check the project right now, but just to make sure I understand correctly, you're doing something like this:
1- You're hooking the class in which the carrier text is set and registering a BroadcastReceiver there.
2- From your app, you're sending a broadcast whenever you want (possibly with the text you want in the extras).
3- In the BroadcastReceiver's onReceive method, you're setting the carrier text to the value you just received.
If that's what you're doing, it seems fine to me. For the permissions issue, I suppose adding the required permission to your manifest will fix that.
Click to expand...
Click to collapse
Not really. The carrier text has nothing to do with the issue anymore. Even if I removed all the code that has to do with the carrier text, and left the bluetooth part alone - the issue would persist.
What I'm doing is this:
1- Have a regular class (meaning it derives from Object directly, and doesn't implement any interfaces).
2- In the said class I set up a BroadcastReceiver (using the application context, which I got via AndroidAppHelper.currentApplication().getApplicationContext(), which is static and can be called from anywhere).
3- When the BroadcastReceiver's onReceive() is called (again, in the previously mentioned class), I call BluetoothAdapter.getDefaultAdapter().setText with the text I want to set as the phone's BT name.
4- Error messages pop-up, and the error I attached in my previous reply shows up on the logcat. (this step occurs when the onReceive is called, which calls the setText).
When I comment out the setText() call, no errors occur (but the BT name doesn't change, obviously).
It's important to note that I did add the needed permissions to my manifest:
AndroidManifest.xml:
Code:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bengr.musicmetadateforlegacydevices"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="xposedmodule" android:value="true"/>
<meta-data android:name="xposedminversion" android:value="50"/>
<meta-data android:name="xposeddescription" android:value="Changes the device's carrier and bluetooth names to display the currently playing track."/>
</application>
</manifest>
So you're not using Xposed for anything anymore? Sorry but I'm a bit confused now.
GermainZ said:
So you're not using Xposed for anything anymore? Sorry but I'm a bit confused now.
Click to expand...
Click to collapse
For what I'm doing right now? Not really.
My module is composed of two parts - one for changing the BT name (which doesn't require private calls, and can be done via Android's public API), and one for changing the carrier name (which does require Xposed, as I'm doing some private calls etc).
The carrier name part of the module works perfectly right now.
However, the Bluetooth one doesn't; and crashes as mentioned before, and throws a permission error. However, on a side-project that's just a regular Android app, that also changes the BT name this works (keep in mind that in both the side-project and the Xposed module project I added both Android bluetooth permissions).
com.android.server.*
I know that these classes have to be hooked in handleLoadPackage for lpparam.packageName == "android", but sometimes there are several processes ("system:ui" for example) that contain this package and hooks fail even from handleLoadPackage.
Now I'm using this code, is it correct?
Code:
if (lpparam.packageName.equals("android") && lpparam.processName.equals("android")) { ... }
Resource hooks
They are just not working. Well, most of them. Using fwd or DrawableLoader doesn't matter. No errors shown in log. It's not just a problem with some packages. Status bar icons, action bar icons, etc, etc - I can't replace 90% of them, exact same hooks were working on Kit Kat.
For example, png drawable is used only in manifest and in actionbar ( actionbar.setIcon(iconResId) ). With a hook this icon is replaced in launcher, but not in actionbar.
Code:
Starting Xposed binary version 60, compiled for SDK 21
Phone: HTC One (HTC), Android version 5.0.2 (SDK 21)
ROM: LRX22G release-keys
Build fingerprint: htc/htc_europe/m7:5.0.2/LRX22G/482424.2:user/release-keys
Platform: armeabi-v7a, 32-bit binary, system server: yes
SELinux enabled: yes, enforcing: no
Mikanoshi said:
Resource hooks
They are just not working. Well, most of them. Using fwd or DrawableLoader doesn't matter. No errors shown in log. It's not just a problem with some packages. Status bar icons, action bar icons, etc, etc - I can't replace 90% of them, exact same hooks were working on Kit Kat.
For example, png drawable is used only in manifest and in actionbar ( actionbar.setIcon(iconResId) ). With a hook this icon is replaced in launcher, but not in actionbar.
Click to expand...
Click to collapse
Noticed that as well. Some resources can be replaced, others it's like they're just silently ignored. I'm guessing maybe the ART optimizations are the culprit?
There's a thread about it here. I'm sure @rovo89 will chime in when he's had time to take a look. As a workaround, you could always find the method that's setting the original drawable and replace it there; that seems to work for me in most cases.
Mikanoshi said:
com.android.server.*
I know that these classes have to be hooked in handleLoadPackage for lpparam.packageName == "android", but sometimes there are several processes ("system:ui" for example) that contain this package and hooks fail even from handleLoadPackage.
Now I'm using this code, is it correct?
Code:
if (lpparam.packageName.equals("android") && lpparam.processName.equals("android")) { ... }
Click to expand...
Click to collapse
So you're saying that there are situations with lpparam.packageName == "android" and lpparam.processName <> "android"? That would explain a couple of other issues. If you could find out a good way to reproduce this, it could be quite helpful.
Depending on the situation, I will have to see how to handle it. Checking for package name "android" is a pretty common pattern to ensure you're in the system server (which I even recommend myself!), so ideally it should stay correct even without the additional checks you suggested.
rovo89 said:
So you're saying that there are situations with lpparam.packageName == "android" and lpparam.processName <> "android"? That would explain a couple of other issues. If you could find out a good way to reproduce this, it could be quite helpful.
Depending on the situation, I will have to see how to handle it. Checking for package name "android" is a pretty common pattern to ensure you're in the system server (which I even recommend myself!), so ideally it should stay correct even without the additional checks you suggested.
Click to expand...
Click to collapse
I've seen only "system:ui" process name, it tries to search for classes in XposedBridge.jar only and of course fails.
Occurrences are very inconsistent, I install modules from Eclipse and then soft reboot like 50 times a day, and this bug happens 2 or 3 times. Not a big problem though, it just clutters Xposed log
I also have a lot of problems with installing apk via adb, it either throws an excpetion and doesn't install
Code:
ActivityManager: java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String android.os.SystemProperties.native_get(java.lang.String) (tried Java_android_os_SystemProperties_native_1get and Java_android_os_SystemProperties_native_1get__Ljava_lang_String_2)
ActivityManager: at android.os.SystemProperties.native_get(Native Method)
ActivityManager: at android.os.SystemProperties.get(SystemProperties.java:52)
ActivityManager: at com.htc.customization.HtcCustomizationManager.<init>(HtcCustomizationManager.java:65)
ActivityManager: at com.htc.customization.HtcCustomizationManager.<clinit>(HtcCustomizationManager.java:60)
ActivityManager: at android.os.Environment$UserEnvironment.getCustomizationReader(Environment.java:523)
ActivityManager: at android.os.Environment$UserEnvironment.isDynamicSwitchSupported(Environment.java:534)
ActivityManager: at android.os.Environment$UserEnvironment.<init>(Environment.java:222)
ActivityManager: at android.os.Environment.initForCurrentUser(Environment.java:142)
ActivityManager: at android.os.Environment.<clinit>(Environment.java:136)
ActivityManager: at android.os.Environment.getLegacyExternalStorageDirectory(Environment.java:726)
ActivityManager: at android.os.Debug.<clinit>(Debug.java:96)
ActivityManager: at android.ddm.DdmHandleHello.handleHELO(DdmHandleHello.java:164)
ActivityManager: at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:91)
ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
ActivityManager: java.lang.UnsatisfiedLinkError: android.os.Debug
ActivityManager: at android.ddm.DdmHandleHello.handleFEAT(DdmHandleHello.java:176)
ActivityManager: at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:93)
ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
ActivityManager: java.lang.UnsatisfiedLinkError: android.os.Debug
ActivityManager: at android.ddm.DdmHandleProfiling.handleMPRQ(DdmHandleProfiling.java:215)
ActivityManager: at android.ddm.DdmHandleProfiling.handleChunk(DdmHandleProfiling.java:106)
ActivityManager: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
or installs but fails to launch until (soft) reboot:
Code:
I/ActivityManager(15637): Process name.mikanoshi.icecontrol (pid 27200) has died
I/ActivityManager(15637): Start proc name.mikanoshi.icecontrol for activity name.mikanoshi.icecontrol/.Settings: pid=27233 uid=10343 gids={50343, 9997} abi=armeabi-v7a
I/art(27233): Late-enabling -Xcheck:jni
W/art(27233): Failed to find OatDexFile for DexFile /data/app/name.mikanoshi.icecontrol-2/base.apk ( canonical path /data/app/name.mikanoshi.icecontrol-2/base.apk) with checksum 0x7991961b in OatFile /data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex
D/Process(15637): killProcessQuiet, pid=27233
No idea if Lollipop or Xposed problem
rovo89 said:
So you're saying that there are situations with lpparam.packageName == "android" and lpparam.processName <> "android"? That would explain a couple of other issues. If you could find out a good way to reproduce this, it could be quite helpful.
Depending on the situation, I will have to see how to handle it. Checking for package name "android" is a pretty common pattern to ensure you're in the system server (which I even recommend myself!), so ideally it should stay correct even without the additional checks you suggested.
Click to expand...
Click to collapse
Yes, I can confirm this seems to be the case. Haven't got a chance to debug which process comes with packageName == "android" apart from "android" process itself, but when that happens, classLoader cannot find classes that are typically available within "android" package, which is logical. The other process that has packageName "android" is something else with no access to those classes.
Oh, and rarely soft reboot after module activation ends like this
Code:
E/Xposed(10834): Error -32 while adding app service user.xposed.app
E/Xposed(10822): Zygote service is not running, Xposed cannot work without it
I would like to concentrate on the bigger issues first. Yours can probably be solved by another reboot.
So after some research, grepping the AOSP code and so on, it seems that the "system:ui" process is only used by the PackageManagerService. Maybe more will follow in the future. For some reason, the process seems to be called "android:ui" though once it has been started. It's running with UID 1000, but in the system_app SELinux context.
I would like to understand some more things about this before making a decision. It seems that there can now indeed be processes with package name "android" that aren't the system_server. Without breaking existing modules, I think I could only block handleLoadPackage() for these. Maybe it would also make sense to add a new handleLoadSystemServer() method. That would avoid the need for checks, especially if only system services are hooked. For backward-compatiblity, handleLoadPackage() could still be called for package "android", but modules would produce error messaages if they don't check the process name. Or there could be a compatiblity break at this point, requiring all modules that hook system services to adopt the new API.
I don't mind checks Almost every module that hooks system classes requires an update for 5.0 anyway.
Huge issues for me now are broken resource hooks and problems with installing apks (sometimes it takes 3-5 tries to install and then soft reboot just to test interface changes).
Most likely, this is the reason why the ChooserActivity runs in the "android:ui" process now:
https://github.com/android/platform...40#diff-30afe08a44bf548c7cc9116a473f8bdfL2798
It used to declare multiprocess=true, which meant that the activity was started in the caller's process. Now it's started in a separate process, where ":ui" is relative to the package name, not the applications's default process name (that would be "system").
There are also other activities with similar attributes defined, even in KitKat. If someone has a bit of time at their hands, they could try to check whether handleLoadPackage() is also called for package == "android" and process != "android" on KitKat ROMs for those other activities. It wouldn't be as noticable as it is on Lollipop because the system services that most modules hook there were available with the boot class path.
Anyway, now we know that there are legitimate usages of the "android" package for other things than the system_server. These usages are very limited though. The activities use the boot classloader, so hooking methods from initZygote() would (still) work for them. What if I set the packageName for these apps to "system" instead? So modules checking for "android" as package name could be sure it's the system_server then. Modules which need to do something for the android:ui process could simply check for "system" as package name. Any complaints?
Good solution... Ship it
But I believe majority of actively developed modules are already fixed for this specific case.
rovo89 said:
Most likely, this is the reason why the ChooserActivity runs in the "android:ui" process now:
https://github.com/android/platform...40#diff-30afe08a44bf548c7cc9116a473f8bdfL2798
It used to declare multiprocess=true, which meant that the activity was started in the caller's process. Now it's started in a separate process, where ":ui" is relative to the package name, not the applications's default process name (that would be "system").
There are also other activities with similar attributes defined, even in KitKat. If someone has a bit of time at their hands, they could try to check whether handleLoadPackage() is also called for package == "android" and process != "android" on KitKat ROMs for those other activities. It wouldn't be as noticable as it is on Lollipop because the system services that most modules hook there were available with the boot class path.
Anyway, now we know that there are legitimate usages of the "android" package for other things than the system_server. These usages are very limited though. The activities use the boot classloader, so hooking methods from initZygote() would (still) work for them. What if I set the packageName for these apps to "system" instead? So modules checking for "android" as package name could be sure it's the system_server then. Modules which need to do something for the android:ui process could simply check for "system" as package name. Any complaints?
Click to expand...
Click to collapse
Great idea, no complaints here.
Whike fixing this, maybe you can try to look why appInfo is null for "android" package.
pyler said:
Whike fixing this, maybe you can try to look why appInfo is null for "android" package.
Click to expand...
Click to collapse
That's very simple to answer: https://github.com/rovo89/XposedBri...de/robv/android/xposed/XposedBridge.java#L245
There's simply no ApplicationInfo object (yet), it's constructed later when the PackageManagerService is running. I could construct a fake object, but there are hardly any fields that could be filled with proper values.
atleast flags field could be filled, or not? just do copy of real object for android, which any normal app can get.
since we talk about this, is this doable or Xposed starts too soon for these values?
rovo89 said:
What if I set the packageName for these apps to "system" instead?
Click to expand...
Click to collapse
Old modules which use "android" are incompatible...
To be compatible i have then to check "system" and "android" - this is not better than check for package& process name
system is for *:ui processes and we mostly care about android only.
pyler said:
system is for *:ui processes and we mostly care about android only.
Click to expand...
Click to collapse
Who is "we" and whats the source of "mostly"
I have to say that i'm using "android" for <21 and so it seems i have to use different package names depending on Xposed version
pyler said:
atleast flags field could be filled, or not? just do copy of real object for android, which any normal app can get.
since we talk about this, is this doable or Xposed starts too soon for these values?
Click to expand...
Click to collapse
"real object for android" => you mean the one that I said doesn't exist at the time the system_server is starting up, as the PackageManagerService is not running yet?
No idea about your other suggestion, I'm currently looking mainly into crashes etc., API extensions have to wait...
defim said:
I have to say that i'm using "android" for <21 and so it seems i have to use different package names depending on Xposed version
Click to expand...
Click to collapse
I was talking about "other things than the system_server", i.e. the process for ChooserActivity etc. This process is hardly used, I'm not even sure if it existed in previous versions. Only for this process, the package name is faked to be "system". The system_server, which is way more widely used, will keep package name "android". So I don't expect a single module to break.
If no update for older modules is needed its great :good:
can i use it on samsung device running cm 12
can i use it on samsung device running cm 12