deckerst / aves

Aves is a gallery and metadata explorer app, built for Android with Flutter.
BSD 3-Clause "New" or "Revised" License
2.64k stars 100 forks source link

fdroid version #29

Closed Donkey-Doug closed 1 year ago

Donkey-Doug commented 3 years ago

Add the app to fdroid.

I assume that the app is currently in early stage and therefore not added, but ultimately the app should be added to fdroid.

deckerst commented 1 year ago

@IzzySoft the libre flavour is ready, but i work with applicationIdSuffixes and other weirdness in the gradle files, so I'd like to check things further with you. Would you mind emailing me to continue and get it to f-droid (without spamming everybody here)?

IzzySoft commented 1 year ago

@deckerst I'm not an Android dev or build expert myself, so I'm afraid I cannot much help with those details. But of course we have some members in our team who are familiar with such things. So may I recommend to either simply open a Request for Packaging aka RFP (the easy approach and generally a good start as you get first indications from our scanners) or go straight for a merge request at fdroiddata if you dare (the "straight-forward approach" giving you even more details and hopefully results in it being merged, thus Aves becoming available at F-Droid)? Discussion would then take place there, where it belongs. And I can pick up there as well, being one of the maintainers :smile:

While at least the RFP path is easy enough for even the average user to go, if you prefer I can open that one for you.

deckerst commented 1 year ago

Aves v1.7.5 is available. With this release a few changes of interest to this thread:

Recap of version differences here.

@IzzySoft About the libre flavour, the app ID is deckers.thibault.aves.libre, distinct from the normal app ID deckers.thibault.aves for all the other flavours. A "fat" APK for this flavour is already built and attached to the release. The gradle file has been modified to make sure that all the proprietary plugins and dependencies are guarded depending on flavours, but I've played with fdroidserver and it yields false positives, detecting google/crashlytics/huawei stuff as problematic even though they are not used for the libre flavour. So I'll let you request and handle things on the F-Droid side.

As far as I'm concerned Aves is now buildable without proprietary stuff:

# ./scripts/pub_get_all.sh
# ./scripts/update_flutter_version.sh
# ./scripts/apply_flavor_libre.sh
# flutter build apk -t lib/main_libre.dart --flavor libre

You can check the GitHub release workflow for reference.

IzzySoft commented 1 year ago

Thanks @deckerst – and let me have a look:

A "fat" APK for this flavour is already built and attached to the release.

Cool! I just checked to make sure: my updater currently is nailed to only accept the ApkMatch: /izzy-armeabi-v7a/i (my repo cannot handle multiple APKs per release (yet) so I usually pick the one with the widest compatibility, which ATM is armeabi), so no conflicts.

The gradle file has been modified to make sure that all the proprietary plugins and dependencies are guarded depending on flavours, but I've played with fdroidserver and it yields false positives, detecting google/crashlytics/huawei stuff as problematic even though they are not used for the libre flavour.

Not sure how exactly you've set that up. At F-Droid's RFP repo that would be even "expected behavior" as issuebot there does not know about the flavors (how could it, as there's no way to specify any). That's usually "fixed" with the MR, where the build recipe specifies the flavor. But then, for some reason my library scanner still reports GMS & GMaps to be detected, so something must be in there. Using apktool I've extracted the smali, and indeed there's a directory for /com/google/android/gms containing auth, common, dynamite and maps – all with "code" inside, so not just stubs. I'm not familiar enough with Flutter to investigate the cause. flutter build apk -t lib/main_libre.dart --flavor libre definitely should take care to build the specified flavor (at F-Droid we usually run flutter config --no-analytics before pub get all to make sure it keeps the analytics stuff out – but as I didn't detect any of that here, that seems to be not needed).

Looking at the scripts you've listed, my guess is you include Maps (plugins/aves_map is not removed), which most likely pulls in Google Maps for Flutter – which then pulls in GMS as GMaps depends on it. Could that be?

Nevertheless: I'd recommend going ahead and opening an RFP with F-Droid. As you've already worked with fdroidserver, you might as well jump that step and directly open a merge request with your *.yml at fdroiddata. Someone with deeper Flutter knowledge will hopefully find time to find out and help around.

deckerst commented 1 year ago

When I run your tool on the izzy and libre apk bundled with the v1.7.5 release I get this:

tibo@redstart:~/code$ scanapk ~/Downloads/app-izzy-armeabi-v7a-release.apk 
W: Cant find 9patch chunk in file: "aO.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "Nk.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "s3.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "jZ.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "sn.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "uW.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "Tx.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "Pb.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "51.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "h-.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "m3.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "Hi.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "rj.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "z5.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "o1.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "YM.9.png". Renaming it to *.png.
No libsmali.jsonl entry for /com/shaded/fasterxml/jackson, this library will be ignored.

Libraries detected:
-------------------
* Android Support v4 (/android/support/v4): Development Framework, Apache-2.0
* AndroidX Activity (/androidx/activity): Utility, Apache-2.0
* Android Jetpack Annotations (/androidx/annotation): Utility, Apache-2.0
* Androidx Core (/androidx/core): Utility, Apache-2.0
* AndroidX Fragment (/androidx/fragment): UI Component, Apache-2.0
* Lifecycle (/androidx/lifecycle): Utility, Apache-2.0
* Android Multi Dex Library (/androidx/multidex): Utility, Apache-2.0
* Android Activity Saved State (/androidx/savedstate): Utility, Apache-2.0
* Startup (/androidx/startup): Utility, Apache-2.0
* Android Jetpack VersionedParcelable (/androidx/versionedparcelable): Utility, Apache-2.0
* Jetpack WindowManager Library (/androidx/window): Utility, Apache-2.0
* Glide (/com/bumptech/glide): Utility, BSD-2-Clause
* Google Maps API (/com/google/android/gms/maps): Map, Proprietary; NonFreeDep,NonFreeNet
* Google Mobile Services (/com/google/android/gms): Development Framework, Proprietary; NonFreeDep
* Flutter (/io/flutter): Development Framework, BSD-3-Clause
* Google Maps for Flutter (/io/flutter/plugins/googlemaps): Map, BSD-3-Clause; NonFreeNet
* url_launcher (/io/flutter/plugins/urllauncher): Utility, BSD-3-Clause
* flutter printing (/net/nfet/flutter/printing): Utility, Apache-2.0
* Android-TiffBitmapFactory (/org/beyka/tiffbitmapfactory): Utility, MIT
* Java MP4 Parser (/org/mp4parser): Utility, Apache-2.0
* ijkplayer (/tv/danmaku/ijk/media): Utility, LGPL-2.1-or-later

Offending libs:
---------------
* Google Maps API (/com/google/android/gms/maps): NonFreeDep,NonFreeNet
* Google Mobile Services (/com/google/android/gms): NonFreeDep
* Google Maps for Flutter (/io/flutter/plugins/googlemaps): NonFreeNet

3 offenders.

tibo@redstart:~/code$ scanapk ~/Downloads/app-libre-release.apk 
No libsmali.jsonl entry for /com/shaded/fasterxml/jackson, this library will be ignored.

Libraries detected:
-------------------
* Android Support v4 (/android/support/v4): Development Framework, Apache-2.0
* AndroidX Activity (/androidx/activity): Utility, Apache-2.0
* Android Jetpack Annotations (/androidx/annotation): Utility, Apache-2.0
* Androidx Core (/androidx/core): Utility, Apache-2.0
* AndroidX Fragment (/androidx/fragment): UI Component, Apache-2.0
* Lifecycle (/androidx/lifecycle): Utility, Apache-2.0
* Android Multi Dex Library (/androidx/multidex): Utility, Apache-2.0
* Android Activity Saved State (/androidx/savedstate): Utility, Apache-2.0
* Startup (/androidx/startup): Utility, Apache-2.0
* Android Jetpack VersionedParcelable (/androidx/versionedparcelable): Utility, Apache-2.0
* Jetpack WindowManager Library (/androidx/window): Utility, Apache-2.0
* Glide (/com/bumptech/glide): Utility, BSD-2-Clause
* Flutter (/io/flutter): Development Framework, BSD-3-Clause
* url_launcher (/io/flutter/plugins/urllauncher): Utility, BSD-3-Clause
* flutter printing (/net/nfet/flutter/printing): Utility, Apache-2.0
* Android-TiffBitmapFactory (/org/beyka/tiffbitmapfactory): Utility, MIT
* Java MP4 Parser (/org/mp4parser): Utility, Apache-2.0
* ijkplayer (/tv/danmaku/ijk/media): Utility, LGPL-2.1-or-later

No offending libs found.

The izzy flavour has the usual offenders and the libre flavour has no offending libs, as expected.

About F-Droid and gradle, it seems F-Droid can usually understand flavours when the yml file declares the flavour used, but that's only a thing for regular java/kotlin projects. For Flutter projects, F-Droid doc says the yml shouldn't specify the gradle favour, and instead just include it in the flutter build command. I guess that's why the F-Droid check script fails with false positives. And it's not only the GMS stuff. For example, their script fails because it doesn't know the Maven repo https://developer.huawei.com/repo/ (which is only used with the huawei flavour). Anyway, I will submit the a packaging request and let them deal with it.

IzzySoft commented 1 year ago

When I run your tool on the izzy and libre apk bundled with the v1.7.5 release I get this:

Yes, I indeed only checked the results in my repo – thus the "izzy" flavor. OK, then I misunderstood – apologies!

Anyway, I will submit the a packaging request and let them deal with it.

Good idea! There are other members in our team who are much more familiar with these realms and then would help to get it on. Thanks a lot!

deckerst commented 1 year ago

Cf https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12154

IzzySoft commented 1 year ago

Great – and all pipelines passed, congrats! I've already started the review – but rather wait for my team mate concerning the ABI splits. He might also come up with ideas on reproducible builds: if you like those, that would be premium – if not, they are not mandatory.

IzzySoft commented 1 year ago

Yeeeha! I just pushed the "merge" button. Aves should show up at F-Droid.org within a few days now!

For those curious: Review part 1 and part2.

Thanks a ton, @deckerst – that's a really great addition to the F-Droid catalog :heart_eyes:

IzzySoft commented 1 year ago

Stand by for the next index: build monitor shows successful build of 3 Aves APKs :star_struck: So Aves will show up before the weekend probably.

deckerst commented 1 year ago

Done

IzzySoft commented 1 year ago

And tooted already. :trumpet: LOUDLY :see_no_evil:

strider72 commented 1 year ago

Suggestion: as people are unlikely to simultaneously have the libre and "regular" versions installed, you can just have the icon labelled "Aves" without the "libre".

Having said that, thank you for releasing on F-Droid! :-)

IzzySoft commented 1 year ago

@strider72 you'd never have to test things I guess, or wanted to compare? I did, and was quite glad that the icons had labels so I knew which was which :wink: But admitted, such cases are rare.

strider72 commented 1 year ago

Heh. I've compared different apps all labelled 'Contacts". But I see your point. :-)

IzzySoft commented 1 year ago

@strider72 those at least (mostly) have different icons (unless they've kept the default Andy-Bot). At one point I had 3 different versions of Aves on the same device. Where it not for the different icons I would not have known which to delete :see_no_evil: Well, actually I use adb uninstall <packageName> so I wasn't really lost at that point. But if you e.g. want to check whether a certain tasks works differently in a different build, different icons are really helpful.