I know there are bugs in the latest version of Superuser (3.0.5), and I’ll do my best to explain what is happening to you. Before that I need to make sure that you all understand that I am the only developer of Superuser (no team, just me), I work full time in the Air Force (Superuser is simply a hobby for me), and I am currently out of the country working.
Now let me say that the current version of Superuser works flawlessly on every device that I have on my test bench, which consists of:
- Nexus S – CM7.0.1
- Nexus One – stock rooted Froyo
- MyTouch 3G – old version of CM based on Donut
- MDP8660 – stock rooted Gingerbread
- Xoom – stock rooted 3.2
- Nook color – CM7 nightly
I do extensive testing of each version on every device that I have before release. That being said, there are thousands of combinations of devices and ROM, which makes ensuring compatibility with every one of them impossible.
The issues that people are having are, for the most part, down to using an outdated binary. With the last couple versions, I tried to remove the requirement to have the latest binary, since there are so many people out there that either have some form of write protection on their system partition at runtime (S-ON), or have the su binary installed in /sbin. Both of these things make it impossible for me to update the binary.
S-ON is easy, since those users can simply download the latest version through ROM Manager, or from this site and flash via recovery mode. This will install the latest binary, and fix the problems.
People with the su binary located in /sbin have a much tougher time. I’ve found that these are mostly Samsung users (with the notable exception of the Nexus S). I don’t know why it’s done this way, and if anybody does know, please let me know, but for some reason kernel and ROM devs for these devices put su in /sbin. /sbin is part of the boot.img, and therefore any modifications to that directory will be erased on boot.
The issues that people are having are caused by a binary that leaves the permissions.sqlite database open while it sends the intent for the prompt. This used to be ok, but sometime in Gingerbread, android started using WAL for SQLite, which causes the app to not be able to open the database if the binary has it open. The 3.0 binary is very good about handling the database, and has no issues if the app has the database open at the same time it needs to read from it. the 2.x binary is not so good about it. The fix that I have worked out for this, and am in the process of trying to implement is to have a service that will update the permissions.sqlite database as necessary, and if it fails to open the database, it will schedule itself to start again until it can gain access to the database.
The other issue I’ve seen is that on some devices, the WAL bits of the database are having their owner changed to root (0), the main database still belongs to the Superuser app, but the parts that are used by WAL belong to root, which makes it impossible for it to be opened by the app. This issue is being a lot harder to track down, because it seems very intermittent and there are so many users that are incapable of helping to track it down for whatever reason, but I am trying to find it.
As I said above, I do everything I can to make sure that things are working, but I can’t test on every device. So what I’ve decided to do is to create a Superuser tester program. I’ve created a form on Google Docs that you can sign up to receive test versions of Superuser before I publish them. There are three levels of testers; Alpha, Beta, and RC. Each will get test versions at different times and have different “responsibilities”. Hopefully I can get plenty of people to sign up and we can make the Superuser experience better for everybody. Please sign up here. Might take me a couple days to get things rolling with the program, but if you sign up, expect a test version soon.
I appreciate everybody’s patience as I get very little time lately to work on these things. Unfortunately I already offered my country 4 more years, so Superuser won’t be a full time job anytime soon. Just know that I am looking into your issues as I can. If you’re a better coder than me, with more time, please feel free to fork the project from my github and submit a pull request for any bugs you can fix.