Hacker News new | past | comments | ask | show | jobs | submit | more chenxiaolong's comments login

LinkSheet [1] can do that. It's a small app that you set as the default browser and shows a prompt when you open a link to allow you to choose what to do (eg. open in browser, open in app, share link, remove tracking URL parameters, etc.).

If you don't care about any of the extra functionality, you can configure it to always open your preferred browser and convert Custom Tabs intents to regular ones. No root access required.

[1] https://github.com/1fexd/LinkSheet


Related submission from earlier today: https://news.ycombinator.com/item?id=38125379

(Though this article also explains how to enable MTE for user apps and verify that it's enabled.)


Per [1], I've also enabled MTE for user applications via the `persist.arm64.memtag.app_default` property. So far, the only crashes I've seen have been in apps that use cgo (eg. syncthing and rclone).

With root access, things can be persistently whitelisted on a per-app basis [2]:

    su -c 'setprop persist.arm64.memtag.app.<package name> off'
or based on basename(argv[0]) [3]:

    su -c 'setprop persist.device_config.memory_safety_native.mode_override.process.<basename> off'
[1] https://googleprojectzero.blogspot.com/2023/11/first-handset...

[2] https://cs.android.com/android/platform/superproject/main/+/...

[3] https://cs.android.com/android/platform/superproject/main/+/...


Wonderful tool! I started using it since 0.6 because sbsigntools and pesign both choked on some EFI executables I had, but sbctl's go-uefi parser did not. It also seems to handle enrolling PK/KEK/db/dbx a lot more reliably than sbkeysync (which used to ignore errors and exit(0)) and efivar.


Yep, what you're referring to (the "Powered by <browser>" screen) is done with the Custom Tabs API. Some folks might also refer to it as the in-app browser. Any browser can implement a CustomTabsService and the whole feature respects the default browser setting.

The Fastmail app is actually a good example of something that uses the WebView APIs though. Fastmail's UI is entirely web-based and their whole app is rendered inside of a WebView, provided by the Chromium-based "Android System WebView" app. If I remember correctly, the list of allowed signatures for a WebView provider is baked into the OS, so no third party can provide an implementation without root access.


What I don't understand is the use case for data descriptors. If the entire file is available, then the central directory is sufficient. If the file is being streamed, then there's no way to know with certainty where the data descriptor is, especially for a scenario like an uncompressed zip stored within a zip.

I suppose a parser could try to compare the CRC and uncompressed size fields every time it encounters the data descriptor magic bytes until it finds one that matches, but the magic bytes aren't even mandatory. The data descriptor can just be CRC + compressed size + uncompressed size with no marker.

From basic testing, `unzip`, libarchive/bsdtar, and the Python zipfile module all choke on files like this when read from a stream (as expected).

Why were data descriptors ever included in the spec?


Looking at AOSP, the logic that allows something like Play Protect to work is at [1]. It looks for system apps that can handle the ACTION_PACKAGE_NEEDS_VERIFICATION intent, which is the Play Store app in this case. Looking at the Play Store's AndroidManifest.xml, the PackageVerificationReceiver component is what listens for that intent.

With root access, it should be possible to disable just that component without breaking other functionality by running:

    pm disable com.android.vending/com.google.android.finsky.verifier.impl.PackageVerificationReceiver
To reenable:

    pm default-state com.android.vending/com.google.android.finsky.verifier.impl.PackageVerificationReceiver
Without root access, disabling the Play Store completely (if you don't need it) via the normal Android settings should also do the trick.

[1] https://android.googlesource.com/platform/frameworks/base/+/...


In case anyone is curious, this is the commit that implements the change: https://github.com/GrapheneOS/platform_packages_apps_CellBro...

EDIT: For folks with rooted devices, all alerts can be disabled with:

    adb shell su -c 'pm disable com.google.android.cellbroadcastreceiver'
and reenabled with:

    adb shell su -c 'pm enable com.google.android.cellbroadcastreceiver'
For folks on custom Android builds (or older stock Android builds without APEX module support), the package name is `com.android.cellbroadcastreceiver` (without the `.google`).


I don't know the details of what happened between the two projects, but according to Wikipedia [1], libav was abandoned a bit over 5 years ago. Looks like their website (and main git repo) no longer exist.

[1] https://en.wikipedia.org/wiki/Libav


In case anyone is curious, I took a quick look at my copy of the set:

- The Fellowship of the Ring

    - Theatrical:      66.7 GiB video @ 53.5 Mbps, 3.81 GiB English audio @ 3055 kbps

    - Extended disc 1: 51.5 GiB video @ 69.8 Mbps, 2.22 GiB English audio @ 3000 kbps

    - Extended disc 2: 56.8 GiB video @ 66.4 Mbps, 2.56 GiB English audio @ 2989 kbps
- The Two Towers

    - Theatrical:      72.4 GiB video @ 57.8 Mbps, 3.90 GiB English audio @ 3108 kbps

    - Extended disc 1: 49.8 GiB video @ 66.9 Mbps, 2.30 GiB English audio @ 3089 kbps

    - Extended disc 2: 52.6 GiB video @ 58.4 Mbps, 2.73 GiB English audio @ 3032 kbps
- The Return of the King

    - Theatrical:      73.2 GiB video @ 52.1 Mbps, 4.33 GiB English audio @ 3086 kbps

    - Extended disc 1: 59.2 GiB video @ 66.3 Mbps, 2.66 GiB English audio @ 2985 kbps

    - Extended disc 2: 61.5 GiB video @ 64.9 Mbps, 2.80 GiB English audio @ 2957 kbps


Consider applying for YC's Summer 2025 batch! Applications are open till May 13

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: