The latest release of Protektoid includes two major updates.
- stability and performances - we hope app will be far more stable regarding interaction with the system (cause of most of the bugs)
- Oreo support
In this post, we will focus on the Oreo support. Another post will explain the other improvements. This post is devided in 4 part, where each of them deals with a specific topic.
This blog post is partially technical but made for a general audience.
Dealing with Oreo specific features, Install app permissions
Probably the most user visible feature on Android O regarding security, any app can install other apps, on the condition that they requested and are granted the permission named "Install unknown apps" (or android.permission.REQUEST_INSTALL_PACKAGES). Before Oreo, any app could trigger an install request if "Allow from unknown sources" was enabled. Now, this control is done at the App level. You can get the official blog post from Google on https://android-developers.googleblog.com/2017/08/making-it-safer-to-get-apps-on-android-o.html
That is great and Protektoid integration, in term of display, was pretty straightforwrd. But ...
The control of the status of this permission (that is "granted" or "not granted") is not standard. It seems that Android relies on a specific code ("AppStateInstallAppsBridge") related to the AppOp "feature". That means that this is impossible for us to detect if this specific permission is granted or not, at Protektoid level. This is exactly the same issue we have/had with apps built for a version before Marshmallow (that shall be over soon, as per Google Store requirements at least).
What can we do and how we dealt with that?
Protektoid can not do much here except giving you the relevant choices.
- If you go to the Permission "Install other apps", you will see here the list of apps that requested "Install unknown apps" permission
- then for each app, we allow you to manually set the status of the permission. See the yellow lock as an indicator
- note that the Modify button also explains that to change this permission, you have to go to "Advanced > Install unknown apps" instead of "Advanced > Permissions".
Dealing with Oreo specific requirements, notifications
With Oreo, it is now mandatory to review the way notifications are sent to the system so that users have better control on them. In Protektoid settings, you could already control them but since Oreo made it mandatory, you can now have an extra control at the system level:
- on your launcher, press and hold an app icon then click on "App info".
- here, you get "App notifications".
- for Protektoid, you see that we have 3 notification channels: App channel (app changes, install), Network Channel (firewall) and General.
Note that none of Protekoid notification make sound as none have any sound assigned. But you can change that too.
Dealing with Oreo specific requirements, cause of undetected apps
Oreo comes with its new set of features but also new set of limitations. For app developers, one of the most important is probably the "Background Execution Limits", explained in https://developer.android.com/about/versions/oreo/background. It is now harder to detect app install / changes / uninstall.
We made the choice, at least for now, to have the least invasive approach : app install is detected at Protektoid launch. That way, if an intent is not caught due to Oreo restrictions, we stil update Protektoid database accordingly. To tell the truth, Protektoid still suffers from limitations on this subject, for instance in term of app updates. This will be hopefully 100% handled in a next release.
Dealing with Oreo specific issue, cause of crash
The last point we wanted to talk about is an issue we faced on Oreo that made some users face undesired behavior while using Protektoid: crashes. Once again, we are really sorry for them and even if Protektoid is free, this is not a justification! Please know that we try to make Protektoid always more stable and we even rely on our own ACRA instance forprivacy-aware bug report review.
Regarding Oreo, the issue was that some app icons (I mean here installed apps, not Protektoid icons) were causing a really unattended error, that is "Android java.lang.IllegalArgumentException: path must be convex". We did not catch this at this is Oreo specifics as introduced in https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable. We fixed it.