Not to be one-upped by the likes of Google, Amazon, or Apple, Samsung introduced its own virtual assistant service called “Bixby” ahead of the release of the Samsung Galaxy S8/S8+. At launch, Bixby was rather incomplete especially since the voice command feature took several weeks to roll out, but Samsung is continuing work on Bixby with a promise of greater functionality, availability, and openness. While we have seen hints at how Samsung might further integrate Bixby with its Samsung Experience UX in the upcoming Galaxy S9, we have recently learned of a totally unintended, yet hilarious, “feature” in Bixby: interfering with an obscure baseball card tracking app.
The open source application, called “Baseball Card Tracker,” is available for free from the Google Play Store. It’s a fairly simple app for a pretty niche audience of users. It doesn’t have a beautiful Material Design interface, but it doesn’t really need to because it gets the job done for its users.
The developer of the application recently upgraded his smartphone to the Samsung Galaxy S8, but was perplexed when he discovered that his simple application would not install on his new phone. Now, a regular user might fire off an angry email at a developer, but a developer would connect to their phone via ADB and collect a logcat to diagnose the problem. So what did he discover?
His Baseball Card Tracker app fails to install on his new Galaxy S8 because it is trying to declare a permission, called
bbct.android.lite.permission.READ, which is already owned by a package called
com.samsung.android.bixby.agent (also known as Bixby Voice). Let’s break this down some more.
What’s going on?
Every Android application has what is called a “Manifest” which is an XML file that contains a list of activities, receivers, services, and a list of permissions that the app can declare. What we’re concerned with are the permissions defined in the Manifest. An application can either declare which permissions they would like to use (
tag) or they can define their own custom permissions (
tag) that other apps must declare before they can call that app.
For example, if an application wants to read the contacts on your device, the app must declare the
android.permission.READ_CONTACTS permission in its Manifest.
By declaring this permission, an application can then read your device’s contacts database. Note that since this is considered a “dangerous” permission, starting in Android Marshmallow the developer has to request this permission be granted at runtime rather than at installation.
Now consider the case where an application developer might want to implement a custom permission. The popular automation app called Tasker implements a permission called
net.dinglisch.android.tasker.PERMISSION_RUN_TASK which other apps must declare in their Manifest before they are allowed to directly run Tasker’s tasks or actions.
The Baseball Card Tracker app in question also implements a custom permission which is named
bbct.android.lite.permission.READ. This is done so another app of theirs can declare this permission and then read the card tracking database of the user.
The same permission cannot be declared by two different apps. For whatever reason, Samsung’s Bixby Voice application is declaring the same permission that the Baseball Card Tracker app is attempting to declare for itself. However, since Bixby Voice is already pre-installed on the Galaxy S8, this means that the Baseball Card Tracker app cannot use the same permission name.
Samsung Bixby Custom Permissions
Line 10: Line 11: Line 12: Line 13: Line 14: Line 15: Line 16: Line 17: Line 82: Line 83: Line 84: Line 85: Line 86: Line 87: Line 88: Line 89: Line 90: Line 91: Line 92: Line 93: Line 94: Line 95: Line 96: Line 97: Line 131: Line 132: Line 160: Line 161:
What makes this all the more confusing is why the Bixby app is declaring this permission at all! If you decompile the app and take a look at all of the custom permissions that Bixby declares, all of them except for one follow the “
com.samsung.android.bixby” naming convention. That exception is of course the poor developer’s Baseball card app.
Commonsware (who first pointed out his hilarious mishap) seems to think the cause is that some developers at Samsung copied code snippets from Stack Overflow. The developer of the app in question posted snippets of his code back in 2013, but has since edited it to genericize the post. We’re unlikely to find out an exact reason why this interference happened, however. It’s possible, but highly unlikely, that it was a total coincidence.
This ultimately has absolutely no effect on any average user. Sure, it might affect the few users of the app who own a Samsung Galaxy S8, S8+, Note8, or who wish to own the upcoming Galaxy S9/S9+, but the fix is relatively simple. For the developer, he would need to rename the permission in his Manifest (or get rid of it entirely) so his app no longer “interferes” with Samsung Bixby. Of course, it isn’t his fault that this is happening in the first place, but he has little recourse in the matter.
Commonsware argues that this little mishap is a great example for why developers need to check their Manifest before shipping an app. I recommend you read his blog post for more details on that, but I just wanted to share this ultimately inconsequential story because of its absurdity. The poor developer!
Want more posts like this delivered to your inbox? Enter your email to be subscribed to our newsletter.