Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why the app maintains support below API < 24 #190

Open
DienoX opened this issue May 16, 2021 · 10 comments
Open

Why the app maintains support below API < 24 #190

DienoX opened this issue May 16, 2021 · 10 comments

Comments

@DienoX
Copy link

DienoX commented May 16, 2021

Hello, I noticed that the application uses the SDK com.google.zxing:core in version 3.3.3.
According to the comment, this is due to compatibility with Android devices below Android 7.0 (August 2016).
Version 3.3.3 of ZXing is released in 2018.
3 years there is no update to the main module in the application anymore.
Based on this article, approximately 75% of users are running Android 7 or later.
https://www.xda-developers.com/android-version-distribution-statistics-android-studio/amp/

Perhaps it would be worth rethinking and checking (if possible) how many binary eye users currently use Android below Android 7. If it is below 5%, it would be worth rethinking. Wouldn't a better solution be a better app with less support for flawed Android versions.

Source:
https://mvnrepository.com/artifact/com.google.zxing/core
https://www.xda-developers.com/android-version-distribution-statistics-android-studio/amp/
https://github.com/markusfisch/BinaryEye/blob/792be87283b5af8f82479e9d2285ecae1e13553f/app/build.gradle

@markusfisch
Copy link
Owner

Well, good question. I would really love to update ZXing to the latest version - but I think nobody would notice any difference right now. While there have been many minor bug fixes since 3.3.3 and even new features like reading multiple barcodes in one image, there's nothing you could really feel in Binary Eye.

So increasing the minSDK now would only exclude users and no one would benefit.

Of course, it's inevitable to update at some point. But if I would do that now, I would loose a potential quarter of my users for no good reason. There are still a lot of older devices out there. It seems that F-Droid in particular is popular on those devices, and I don't see why I should exclude someone because they can't afford (or don't want) a newer device.

From a developer perspective, I can understand your argument. Updating the minSDK would certainly make things easier and it also would make ZXing more stable. And we could finally migrate to the AndroidX libraries. But from a user's perspective, that would just be rude, I think.

A possible solution would be to distribute two versions of the app: one with the minSDK as it is (for older devices) and one with a raised minSDK and all the possible updates (for newer devices). This can actually be done with Google Play by always publishing two updates in that order. This way, older devices would get the latest update for their OS while newer devices would get the latest built. On the other hand this would mean I would have to maintain two branches.

@DienoX
Copy link
Author

DienoX commented May 17, 2021

I guess you shouldn't split your application into two separate branches because your time is very important and you can do many things for opensource or take a walk for health.
I think it would be worth checking how many people are currently using Android versions below 7. If it is below 5%, just leave the current binary eye version in the Play store. People with unsupported Android will be able to use a great application which is binary eye. People with new Generation binary eye versions will be able to enjoy the application that is the best. Your time is very precious, solving problems already resolved does not make sense, and with a high degree of probability I can say that people with old versions of Android will be happy during Using your application.

Of course, it is your choice, you spend the most time on this project. ;)

It would be good if the co-authors of the project or simply users commented on this topic.

@TheLastProject
Copy link
Contributor

I have an app that also uses ZXing (Catima) and the reason they dropped support for versions of Android below 7 is for a single line of code, see zxing/zxing#1170.

I would personally much rather see someone maintain a version of ZXing that lets us use all improvements without having to drop everything before Android 7 because of a single line of code that can be replaced by something else that works the same, but I'm talking just about myself here. No clue how @markusfisch feels about this.

@markusfisch
Copy link
Owner

Exactly the same. The only argument ZXing's maintainer had was that the app in his Repo doesn't target anything before Android 7 anymore. For a library provider, I think this argument is frighteningly short-sighted and self-centred.

Personally, I see value in supporting older devices and software for as long as possible. At least as long as it's not too much of a burden on the current generation. I see no value in excluding people for the convenience of developers.

@TheLastProject
Copy link
Contributor

I noticed a new entry in the zxing FAQ: https://github.com/zxing/zxing/wiki/Frequently-Asked-Questions#it-doesnt-work-with-java-7--no-interface-method-sortljavautilcomparator

So I did some research and tested with an Android emulator running Android 4.4.2 and... good news, it is possible for us to upgrade to a new zxing version without dropping support for old Android versions. Here are the changes I made for Catima, I hope this information can help Binary Eye too: CatimaLoyalty/Android@cbcf1bc

@DienoX
Copy link
Author

DienoX commented Jul 28, 2021

Very good news! Thank you for your information.

@nbraud
Copy link

nbraud commented Jul 29, 2021

Hello, I noticed that the application uses the SDK com.google.zxing:core in version 3.3.3.
According to the comment, this is due to compatibility with Android devices below Android 7.0 (August 2016).
Version 3.3.3 of ZXing is released in 2018.
[...] Wouldn't a better solution be a better app with less support for flawed Android versions.

All things being equal, compatibility is a feature. Is there anything in newer versions of ZXing that would be worth leaving many Android users behind?

(Of course, as @TheLastProject pointed out, it's possible to recompile the library into something that will run on older Android versions, so the original point is kind-of moot, but I felt it was still worth pointing out the problem with this kind of request.)

Based on this article, approximately 75% of users are running Android 7 or later.
Perhaps it would be worth rethinking and checking (if possible) how many binary eye users currently use Android below Android 7. If it is below 5%, it would be worth rethinking. Wouldn't a better solution be a better app with less support for flawed Android versions.

There is a bunch of issues with this:

  • Google's statistics only account for users who are running Google Play services and haven't disabled the telemetry, while many users of opensource applications also use an opensource OS.
  • The 5% threshold is arbitrary, and cannot meaningfully be set without first assessing the cost of not upgrading ZXing; for instance dropping some backwards-compatibility can be more justified by security issues that can cause the phone to be compromised by scanning a malicious QR code, than by UX bugs, and even less so by just wanting a higher version number.
  • The whole argument assumes some kind of fungibility amongst users; in reality, this is not the case: users who are on older, unsupported Android versions, are often those who simply cannot afford to upgrade; moreover, poverty correlates to other axes of marginalization and vulnerability (like race, family situation, being queer, etc.)

@markusfisch
Copy link
Owner

@TheLastProject Thanks a lot for the tip! 👍 That really seems like a good way to update ZXing and keep the minSDK version. Will definitely try this!

@nbraud Yes, that's what I am thinking too. I don't want to leave anyone behind.

@GlassGruber
Copy link

GlassGruber commented Aug 28, 2021

A very small note to say thank you for this project and the outstanding backwards-compatibility!

Also I think that you should totally mention the compatibility in your (already excellent!) feature list. The http url send can be really handy. Also remarkable the F-Droid distribution channel 👍.

Quite some devices I have from early 2010 are totally functional and still rocking and useful with apps like yours!

My 🎩 to you sir!

@markusfisch
Copy link
Owner

Thanks a lot! Always good to get feedback like this! 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants