• Re: FOSS Contacts app with privacy for backup & restore offline

    From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android on Fri Feb 6 13:24:10 2026
    From Newsgroup: comp.mobile.android

    Maria Sophia wrote:
    Here's that flow in itemized format:
    1. Export system contacts to VCF (preferably to external sd card)
    2. Import VCF into DOpen Contacts (preferably from external sd card)
    3. Verify contacts inside DOpen Contacts
    4. Copy to safe non-phone storage (e.g., your home personal PC).
    If desired, use Veracrypt to encrypt the contacts database.
    4. Delete system contacts (optional)
    5. Disable Google sync (optional)
    If contacts change frequently, then back up DOpen Contacts' VCF regularly.

    To add further technical value to this concept of setting up Android for contact management outside of what Google marketing wants us to do, below
    is a verbatim copy of a post I just wrote up for Carlos & Frank just now.

    Carlos E.R. wrote:
    On 2026-02-06 11:55, Frank Slootweg wrote:
    Carlos E.R. <robin_listas@es.invalid> wrote:
    On 2026-02-05 22:32, Maria Sophia wrote:
    Carlos E.R. wrote:
    On 2026-02-05 19:47, Maria Sophia wrote:
    Privacy is a million things where most people only know four or five >>>>>> of those million things, and just one of those million things that >>>>>> most people don't know is to keep their contacts sqlite database
    completely empty on Android.

    We do know. We choose to disregard.

    But then you must ask for permission from each contact for you to store >>>> their private information on the cloud, which is a lot of work, is it not? >>>
    No, I don't have to. Not in Europe.

    If we had to, lawyers would have jumped lot long ago at the yugular of Google. And the regulatory bodies of several European countries. Right
    now, France is suing some huge USA corporations for I don't remember
    what exactly, related to privacy concerns.

    And in the USA Google is also being sued for something big, too.


    Not only that, but the contact information isn't stored "on the cloud"
    in the first place. But "on the cloud" sounds so conveniently scary, so
    why say where it's actually stored, when you can lie about it being "on
    the cloud"?

    Google would have to state in their conditions that they are going to
    make use of the contact list for something akin to publishing it.


    BTW, "*on* the cloud" isn't that bad anyway, but I digress ...

    As to the original 'Subject:': What happened to Wi-Fi?

    Hi Carlos (and Frank),

    I read EVERYTHING you both write, always, so I appreciate what you said.

    Carlos & Frank bring up excellent points that just having contacts in the sqlite location on Android (or in iOS) isn't a privacy hole by itself.

    Since I put together systems for a living, and since I used to have an engineering-level TSSI special access designation, I'm likely more tuned to privacy holes than most people, as I've seen "how they work out there".

    Most people, I'd wager, would be shocked at how much is hoovered about us.
    With that in mind, I will address Carlos' & Frank's stated concerns above.

    This is a technical summary of what actually happens with contacts on
    Android and why the privacy risks are not about the SQLite file itself
    but about the data flows around it.

    1. What is Android's local-storage model for contacts anyway?
    A. Android stores contacts in a local SQLite database accessed through
    the ContactsContract provider.
    B. The file is on the device, not on a remote server, so in that narrow
    sense it is not "on the cloud" as Frank had astutely mentioned.
    C. The real issue is not the file location but which processes can read
    it and where they send the data. That locale could be "on the cloud".

    2. What about the pernicious sync adapters from the hoovering outfits?
    A. Google, Samsung and other account providers register sync adapters
    that copy the local contacts to their servers.
    B. This includes backup, deduplication, and "smart" features that
    require server side processing.
    C. Once synced, the data is stored, replicated, and retained under the
    provider's policies. Do you trust them? I don't. Not inherently.

    3. What about third-party app access to your contacts list?
    A. Any app granted READ_CONTACTS can query the entire address book.
    B. Many apps upload the data to their own servers for contact
    discovery, spam detection, or analytics.
    C. This creates shadow profiles of people who never installed the app
    and never consented to any processing. IMHO, that's rude.

    4. I think it was Carlos who brought up the EU rules on privacy...
    A. Under GDPR the people in our address book are data subjects and we
    and the service providers are controllers or joint controllers.
    B. Storing a friend's number so we can call them is usually covered by
    legitimate interest.
    C. Uploading their data to multiple foreign companies for profiling is
    a different matter and often outside reasonable expectations.
    D. Purpose limitation and data minimization apply even if the user
    interface makes the upload look routine.

    5. Well then, what are the actual concrete technical risks?
    A. Social graph reconstruction for one, in that a full address
    book reveals who knows whom and which clusters exist.
    B. Metadata enrichment for another, in that phone numbers and emails
    can be cross referenced with breach corpora & data broker datasets.
    C. Hashing does not really protect phone numbers because the space
    is small and predictable so brute forcing is considered trivial.
    D. Breach amplification is another domino effect where one compromised
    app leaks data about everyone in the user's address book.
    E. Centralized storage increases the impact of legal compulsion,
    insider access, and mass breaches.

    6. However, I openly admit an empty SQLite db is an extreme position.
    A. It is true that an empty db cannot be synced or exfiltrated.
    B. It is also true that most people want caller ID, messaging, and
    search, so they accept some risk.
    C. More practical controls include denying READ_CONTACTS to most apps,
    disabling cloud sync, or using separate profiles for sensitive work.

    7. What about using a private contacts app instead of the system database?
    A. Apps like DOpen Contacts store entries in their own private
    database, not in the system SQLite contacts provider.
    B. This means no third-party app with READ_CONTACTS can see or copy
    those entries because the private database is sandboxed.
    C. Despite being private, the app still provides full functionality
    for calling and texting because Android allows a dialer app to
    initiate calls and send SMS without exposing its internal contact
    store.
    D. The app also maintains its own call log so caller names appear
    without ever populating the system contacts database.
    E. This gives two advantages at once:
    1. Privacy, because nothing is placed into the global SQLite store
    that other apps or sync adapters can read.
    2. Functionality, because we still get caller ID, call history,
    search, and messaging without leaking other people's numbers.
    F. The only time the system contacts database must be touched is when
    exporting the old contacts to VCF for import into the private app.
    G. After import, the system contacts can be deleted and the SQLite
    database can remain empty forever if desired.
    H. Or, we can poison it with random garbage using FOSS tools
    which are designed to randomize the SQLite contacts database
    <https://f-droid.org/en/packages/me.billdietrich.fake_contacts/>
    I. This systematic approach avoids the extreme position of having
    no contacts at all while still preventing the usual data flows
    that leak other people's phone numbers to corporations sans consent.

    8. Summary points that, I hope, take into account a reasonable assessment:
    A. As Frank pointed out, the SQLite file is not the privacy problem
    in and of itself. It is just a local store that sits on the device.
    B. The real privacy problem is the chain of sync adapters, third-party
    apps, backups and cross-border transfers that copy the data
    elsewhere without the knowledge or consent of the people listed in
    our address book. In my rule book, that's incredibly rude to do.
    C. Any app with READ_CONTACTS can copy the entire address book which
    leaks other people's phone numbers to corporations. Privacy is not
    only about protecting ourselves, it is also about not exposing
    other people's data without permission. And nobody asks permission.
    D. Even if Google Contacts sync is disabled, Google Play Services or
    OEM layers may re enable it after updates. Call logs are stored
    separately so the social graph can still be inferred.
    E. Using a private contacts app like DOpen Contacts avoids these data
    flows because it keeps entries in a sandboxed database that no
    other app can read. It still provides calling, texting, caller ID,
    search and call history without ever populating the system contacts
    provider. I'm looking at operating systems with a system approach.
    F. The only time the system contacts database must be touched is when
    exporting old entries to VCF for import into the private app. After
    that the system database can be deleted or even poisoned with fake
    entries if desired. To me, that's a far better privacy model than
    the model that google marketing gave us out of the box for Android.
    G. VCF remains the only universal future proof format for contacts. A
    contacts app that cannot export or import VCF is not under our
    control. A backup method that requires the Internet is even worse.
    H. In short the privacy risk is not the SQLite file but the ecosystem
    around it. When we grant contact access or enable sync we are not
    only deciding for ourselves, we are also volunteering other
    people's data into someone else's infrastructure and threat model.

    That is rude in my opinion and it is one of the million privacy
    issues most people do not know about because they only know five.
    --
    The interesting part about privacy is that most people know about a half
    dozen of the million things you need to know to do to maintain privacy.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Martin =?UTF-8?Q?Sch=C3=B6=C3=B6n?=@martin.schoon@gmail.com to comp.mobile.android on Mon Feb 9 11:23:15 2026
    From Newsgroup: comp.mobile.android

    Den 2026-02-05 skrev Maria Sophia <mariasophia@comprehension.com>:
    < snip >
    You can use this FOSS contact program for private backup and restore.
    *DOpen Contacts* (Dialer + Open Contacts) <https://f-droid.org/en/packages/opencontacts.open.com.opencontacts/> <https://gitlab.com/sultanahamer/OpenContacts> debug APK available

    < snip >

    How about the Contact app from Fossify?
    https://www.fossify.org/apps/

    /Martin
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android on Mon Feb 9 13:29:01 2026
    From Newsgroup: comp.mobile.android

    Martin Sch%%n wrote:
    You can use this FOSS contact program for private backup and restore.
    *DOpen Contacts* (Dialer + Open Contacts)
    <https://f-droid.org/en/packages/opencontacts.open.com.opencontacts/>
    <https://gitlab.com/sultanahamer/OpenContacts> debug APK available

    < snip >

    How about the Contact app from Fossify?
    https://www.fossify.org/apps/

    Hi Martin,

    Thanks for that suggestion as for years I've kept my default contacts
    sqlite database empty for the obvious privacy reasons (I'm not rude).

    Before Android 12, it used to be easy to copy the /data/data without
    being rooted (Samsung USAs come with locked bootloaders), but that's
    no more.

    So I'm forced to manually (aurgh!) copy my contacts from the last-known
    good version of PulseSMS "Conversation settings" into a contacts app.

    Because of that, I also need a sane way to import/export VCF files for backup/restore. Without access to /data/data, VCF is basically the only portable, non-root backup format left that doesn't leak everything into
    the system ContactsProvider.

    So definitely, I need help and advice for storing contacts in a usable
    way (e.g., without populating the sqlite database) but with dialer/sms/mms functionality (which I've been testing DOpen Contacts with for a few days).

    I don't really like the GUI in DOpen Contacts, so I'm all for testing
    another contacts app that keeps the contacts out of the sqlite database
    and supports VCF import/export for backup/restore.

    So I'm definitely open to Fossify Contacts if it also avoids populating
    the system provider. I don't want anything in the SQLite contacts store.

    Let me look it up.... drat! Bummer. I'm saddened.

    Fossify Contacts is apparently a nice replacement UI for managing
    contacts. But apparently it still uses the standard Android
    ContactsProvider. That means it uses the system SQLite contacts
    database. Which means it uses the same storage model as the stock
    Contacts app.

    So if we add a contact in Fossify Contacts, it will appear in the
    system contacts DB and that means any app with contacts permission
    can read it.

    Sigh.

    The pre-2021 Simple Mobile Tools Simple Contacts Pro had a "local-only"
    mode that stored contacts in its own internal storage, and it also
    supported VCF import/export. But in my testing years ago, it worked
    only with some dialers, not all.

    Apparently Koler (dialer) + internal contacts is a minimalist dialer
    that can maintain its own internal contacts list which works for
    dialing. But it does not integrate with SMS/MMS apps (they won't see
    the contacts), and it doesn't solve the VCF import/export need.

    There's also an F-Droid Contacts (Privacy Friendly Apps project) which
    stores contacts internally, but it too has no integration with
    dialer/SMS apps unless the dialer supports custom contact sources
    (most don't). VCF import/export exists, but without dialer/SMS
    integration it's not enough.

    There is also Secure Contacts, which adds encrypted local storage with
    no system DB usage, but it too has no dialer/SMS integration that I
    know of, and VCF support is limited.

    What we need, for privacy, in Android 12 and up, is...
    a. No system contacts DB usage
    b. Dialer + SMS/MMS name resolution
    c. Usable UI
    d. VCF import/export for backup/restore
    e. No need for root as /data/data isn't accessible in Android 12+

    The only contacts apps that I've found that meet the privacy
    requirements are:
    1. DOpen Contacts (supports private storage + VCF import/export)
    2. Simple Contacts Pro (old version from before 2021)

    If anyone knows of a modern FOSS contacts app that keeps everything
    out of the system provider and supports VCF import/export and integrates
    with dialer/SMS, I'd love to hear about it.
    --
    Privacy is knowing how to do the simplest of things, all day, every day.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Martin =?UTF-8?Q?Sch=C3=B6=C3=B6n?=@martin.schoon@gmail.com to comp.mobile.android on Wed Feb 11 08:32:52 2026
    From Newsgroup: comp.mobile.android

    Den 2026-02-09 skrev Maria Sophia <mariasophia@comprehension.com>:
    Martin Sch??n wrote:
    You can use this FOSS contact program for private backup and restore.
    *DOpen Contacts* (Dialer + Open Contacts)
    <https://f-droid.org/en/packages/opencontacts.open.com.opencontacts/>
    <https://gitlab.com/sultanahamer/OpenContacts> debug APK available

    < snip >

    How about the Contact app from Fossify?
    https://www.fossify.org/apps/

    < snip >

    So definitely, I need help and advice for storing contacts in a usable
    way (e.g., without populating the sqlite database) but with dialer/sms/mms functionality (which I've been testing DOpen Contacts with for a few days).

    I don't really like the GUI in DOpen Contacts, so I'm all for testing
    another contacts app that keeps the contacts out of the sqlite database
    and supports VCF import/export for backup/restore.

    < snip >

    I tried installing OpenContacts yesterday using f-droid and was met by
    an error message. I did not have the presence of mind to screenshot
    it but it was something about issues with digital signing of the
    application.

    /Martin
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android on Wed Feb 11 19:55:41 2026
    From Newsgroup: comp.mobile.android

    Martin Sch%%n wrote:
    I tried installing OpenContacts yesterday using f-droid and was met by
    an error message. I did not have the presence of mind to screenshot
    it but it was something about issues with digital signing of the
    application.

    Hi Martin,

    First and foremost, thank you for having the common decency and respect for your fellow friends & neighbors in your contacts to even test it out.

    Most likely cause in your case you may have had an older OpenContacts build perhaps, or a fork perhaps, or maybe even a version installed from
    somewhere other than F-Droid perhaps as in *those* cases, F-Droid will
    refused to overwrite it because the signing keys won't match.

    Even so, I'm well aware most people have no concept of respectful decency
    when it comes to asking permission to upload willy nilly other people's
    private data, so I already give you huge kudos for trying to be respectful
    to your fellow man.

    Very very very very very few people are respectful of others like that.
    I am. But most people don't respect the privacy rights of other people.

    You do.
    And that's why I commend you for trying.

    On the thread about numbers of contacts, we've already found that there are many (hidden) apps (mostly system) which can read our contacts, and anyone
    who says they've protected them is being overly optimistic on their skills.

    Speaking of skills, I really never have figured out signature protection myself, but you seem to be running into one of the most common F-Droid installation problems of a signature mismatch. Based on what's known about F-Droid's signing model and the kinds of errors users report, here's the clearest explanation of what likely happened.

    F-Droid rebuilds most apps from source and signs them with F-Droid's own signing key, not the developer's. If the user already has a version of the
    app installed from another source (GitHub, developer website, another repo)
    or a leftover package with a different signature... then Android will
    refuse to install the F-Droid version because the signatures won't match.

    At least this seems to be the same class of problem described in other
    F-Droid signature-mismatch reports, where the client blocks installation or update when the signature differs from what's already on the device <https://forum.f-droid.org/t/f-droid-client-blocks-updating-apps-if-signature-does-not-match/19506>

    The message typically looks like:
    "Signature verification failed"
    "App not signed with the same key"
    "Incorrect signature"
    Where these errors appear when:
    a. The app was previously installed from a different source
    b. The package name is the same, but the signing key is different
    c. F-Droid refuses to overwrite it for security reasons

    This is similar to other "incorrect signature" issues users encounter when F-Droid detects a mismatch between expected and actual signatures in a repo
    or app package <https://gitlab.com/fdroid/fdroidclient/-/issues/1208>

    My suggestions?
    a. Uninstall Dopen Contacts completely & re-install it.
    b. Download the APK from F-Droid's web site & tap to install
    c. Use App Manager (Muntashirakon) to "install only"

    Muntashirakon App Manager allows installing mismatched-signature APKs
    without uninstalling first, similar to what users describe when bypassing signature checks for other apps.

    Note almost everyone on Android who knows anything about Android already
    has Muntashirakon App Manager so if you don't have it, get it. :

    <https://github.com/MuntashirAkon/AppManager> (apk)
    <https://muntashir.dev/AppManager/en/> (doc)
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Martin =?UTF-8?Q?Sch=C3=B6=C3=B6n?=@martin.schoon@gmail.com to comp.mobile.android on Thu Feb 12 09:31:59 2026
    From Newsgroup: comp.mobile.android

    Den 2026-02-12 skrev Maria Sophia <mariasophia@comprehension.com>:
    Martin Sch??n wrote:
    I tried installing OpenContacts yesterday using f-droid and was met by
    an error message. I did not have the presence of mind to screenshot
    it but it was something about issues with digital signing of the
    application.

    < snip >

    Most likely cause in your case you may have had an older OpenContacts build perhaps, or a fork perhaps, or maybe even a version installed from
    somewhere other than F-Droid perhaps as in *those* cases, F-Droid will refused to overwrite it because the signing keys won't match.

    No, never tried OpenContacts before.

    < big snip >

    /Martin
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android on Thu Feb 12 18:04:57 2026
    From Newsgroup: comp.mobile.android

    Martin Sch%%n wrote:
    Most likely cause in your case you may have had an older OpenContacts build >> perhaps, or a fork perhaps, or maybe even a version installed from
    somewhere other than F-Droid perhaps as in *those* cases, F-Droid will
    refused to overwrite it because the signing keys won't match.

    No, never tried OpenContacts before.

    Hi Martin,

    You have plenty of options.

    I did helpfully provide TWO different APK sources (Gitlab & F-Droid).
    Did you try both of them? That's what I would have done.

    It's likely the Gitlab APK will work even if the F-droid failed for you.
    I's what most people do when they have the problem that you reported.

    That's why I put links to both of them in the OP for example.
    I wouldn't just give up when the first stumbling block hits me.

    However, I didn't experience the signature mismatch you're reporting,
    and I have over a thousand apps (many of which are contacts related).

    I have between 60 and 70 packages alone that read contacts, but none of
    them clashed with DOpen Contacts when I installed it on Android 13.

    When I opened DOpen Contacts in Muntashirakon App Manager (which everyone
    by now has because it's 1 of the best Android apps ever written), it shows
    Verified
    Signature schemes: v1, v2
    Signer Certificate
    Subject: C=US,O=Android,CN=Android Debug
    Issuer: C=US,O=Android,CN=Android Debug
    Issued date: Fri Mar 24 11:11:12 PDT 2017
    Expiry date: Sun Mar 17 10:11:12 PST 2047
    Type: X.509, Version: 1, Validity: Valid
    Serial number: 01
    Checksums
    MD5: faab441b6a45efa6bf9c5ff5044d42f5
    SHA-1: cf9157b36895569cc2da9b410fefd19d1cbc65ab
    SHA-256: 30c07613a1420ec5d83006d763fa4d5aa4f29d193942f7e922573f8fd623e5c6
    SHA-384: 08e8862543982fe487e768c7829c5b287f9c59e7f9b05a7e14a3e9df54da6444040e433087bf2d55adf2785ff2e6e85a
    SHA-512: e12b9b83c5729bc8feaacc5e623557d5eb51fe840f9d200b7e01d294efa34188df6c87866b960a21acb43eec1bc270b7168674b54b7df939ba7979acbb94f0fc
    Signature
    Algorithm: SHA1withRSA
    OID: 1.2.840.113549.1.1.5
    Signature: 1cbbc23247d9823ebd725498663e0ae3c4b6ccb23094acb44a5f64521e4ef3b9440ed1fab8820cafca585058ab02a25ecd0f889e004f90a09e0046c5be8aba2bc3daadf24332ab344486051771c157caebb19c4edebdc54c765564606cde3bec7245b3ddf7fb0f6eaa01563fbd39dff5824c9231af437eb89af5542341dbe067
    Public key
    Algorithm: RSA
    Format: X.509
    Exponent: 65537
    Modulus: 00a40404d368daadb36d1e5dbfe7cca948c10fe34eb4020906eadb186d1681a74b7e5124309717799bab6bce38f7ddbbc8770e1d049f0c3e8b8f623ff4ae7d8f775d506825166897125ffb2b573f63c09ffa7b9dcf95866eafcea9a00b9b29515c8582fe1af38b58aee23f0bac7945e78a97c769acc89e476c9384b9b9e5da337

    You can't do that perhaps because it may not have actually
    installed itself, but you can certainly look at the APK.

    I just examined the F-Droid APK using MixExplorer which brings up Muntashirakon which reveals the following information about it.
    opencontacts.open.com.opencontacts
    Version: 31.0 | 31
    Installed: 28.0 | 28
    Open App
    Target: X.0 (X, API 32)
    Minimum: 4.1 (JB, API 16)
    Play Store Manifest Certificate

    Clicking on the Certificate link in that GUI reveals
    Type: X.509
    Version: 3
    Serial Number: 0x7bb18041
    Subject: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK
    Valid from: Oct 27, 2018 11:56 AM
    Valid until: Mar 14, 2046 10:56 AM
    Signature
    Algorithm: SHA256withRSA
    OID: 1.2.840.113549.1.1.11
    Public Key
    Algorithm: RSA (2048 bits)
    Exponent: 65537

    When I check the CHECKSUM by clicking on the link, I get:
    CRC32: 03366234
    MD5: 7ba54b67b1a2cea0396ab533ae731807
    SHA1: efa927efe8218e143bf8ef5e8d8c33d7dbda5792
    SHA256: b9ab2d7861cd40b98ca41a1fe0aa220d53135829ffeaf6b6c64b3b36b2df9505
    SHA384: b8469130a823813560b5e404ed024e8d3ffd3b96400856d67c6a537e10f03cefcba0e14535e4a9eb43ec38d3367304a3
    SHA512: 107121542beb30e84208790edd234d981127113511e6f5b1a846ebad471eac7b3dfbe19d933faa4d804b0a07ac9a845d83dd53b9271f4914012482faef43c48b
    Modules: 19712854070997158969458470785506046943117271263975875077738127533430811404862317137489721357824602046245116439141943382182966192713558982437347399065914485986653990945550850054727022879842200775980867902114961996605864421217999673029368833190953541238864060635047305708524376529371296727590076687403323553447275799215977619017363694039235924568092445310292045384134180759195030963472573757145594669500045894328352244000976604246820946728266773028437452712205895377613806096156446673821600774533503782594874316361224986279375054217450734008589888276143898049929240058018380539356526298057098572766426945143487600077317
    CRC32: 03366234
    MD5: 7ba54b67b1a2cea0396ab533ae731807
    SHA1: efa927efe8218e143bf8ef5e8d8c33d7dbda5792
    SHA256: b9ab2d7861cd40b98ca41a1fe0aa220d53135829ffeaf6b6c64b3b36b2df9505
    SHA384: b8469130a823813560b5e404ed024e8d3ffd3b96400856d67c6a537e10f03cefcba0e14535e4a9eb43ec38d3367304a3
    SHA512: 107121542beb30e84208790edd234d981127113511e6f5b1a846ebad471eac7b3dfbe19d933faa4d804b0a07ac9a845d83dd53b9271f4914012482faef43c48b

    Do you get the same output from the F-Droid APK you downloaded?
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android on Thu Feb 12 18:27:13 2026
    From Newsgroup: comp.mobile.android

    Maria Sophia wrote:
    Subject: C=US,O=Android,CN=Android Debug
    Issuer: C=US,O=Android,CN=Android Debug

    Ooops. I was trying to be helpful to Martin, as I'm one of the most helpful people on this newsgroup, but I accidentally opened the "gitlab debug" APK.

    This is the certificate for the F-Droid APK.
    Note that the APK doesn't need to be installed.
    It simply needs to exist.

    Note this is signed by the F-Droid team & is NOT a debug version.

    Serial Number: 0x7bb18041
    Type: X.509
    Version: 3
    Serial Number: 0x7bb18041

    Subject: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK

    Valid from: Oct 27, 2018 11:56 AM
    Valid until: Mar 14, 2046 10:56 AM

    Signature
    Algorithm: SHA256withRSA
    OID: 1.2.840.113549.1.1.11

    Public Key
    Algorithm: RSA (2048 bits)
    Exponent: 65537
    Modules: 19712854070997158969458470785506046943117271263975875077738127533430811404862317137489721357824602046245116439141943382182966192713558982437347399065914485986653990945550850054727022879842200775980867902114961996605864421217999673029368833190953541238864060635047305708524376529371296727590076687403323553447275799215977619017363694039235924568092445310292045384134180759195030963472573757145594669500045894328352244000976604246820946728266773028437452712205895377613806096156446673821600774533503782594874316361224986279375054217450734008589888276143898049929240058018380539356526298057098572766426945143487600077317

    CRC32: 03366234
    MD5: 7ba54b67b1a2cea0396ab533ae731807
    SHA1: efa927efe8218e143bf8ef5e8d8c33d7dbda5792
    SHA256: b9ab2d7861cd40b98ca41a1fe0aa220d53135829ffeaf6b6c64b3b36b2df9505 SHA384: b8469130a823813560b5e404ed024e8d3ffd3b96400856d67c6a537e10f03cefcba0e14535e4a9eb43ec38d3367304a3
    SHA512: 107121542beb30e84208790edd234d981127113511e6f5b1a846ebad471eac7b3dfbe19d933faa4d804b0a07ac9a845d83dd53b9271f4914012482faef43c48b

    What specifically matters for this issue Martin is expressing is:
    Subject: CN=FDroid, OU=FDroid, O=fdroid.org, L=ORG, ST=ORG, C=UK
    Algorithm: SHA256withRSA
    Public Key: RSA (2048 bits)
    SHA256 fingerprint of the certificate
    The question for Martin is what he sees if he doesn't see that?

    What else matters is the SHArCa256 fingerprint of the certificate.
    Because that is the true identity of the signing key.

    Note that this is the certificate's SHA-256 fingerprint:
    SHA-256: b9ab2d7861cd40b98ca41a1fe0aa220d53135829ffeaf6b6c64b3b36b2df9505
    This is the true identity of the signing key.
    If the installed version has a different SHA-256 fingerprint
    then Android rejects the update.

    That one line is the #1 value that determines compatibility
    where the #2 line that determines compatibility is the modulus.
    Modulus: 009c27e7fecd6c93a46d92ddd5e1f4912ff68644f8e97f1b718163f237c48c1c6f41f4a97...
    If the public key modulus doesn't match, then Android rejects it too.

    In summary, since I'm one of the most helpful people on this ng,
    I will summarize for Martin that the most important things are
    1. Subject
    CN=FDroid, OU=FDroid, O=fdroid.org...
    2. Certificate SHA-256 fingerprint
    b9ab2d7861cd40b98ca41a1fe0aa220d53135829ffeaf6b6c64b3b36b2df9505
    3. Public key modulus
    009c27e7fecd6c93a46d92ddd5e1f4912ff68644f8e97f1b718163f237c48c1...
    All of which is available to anyone who has the APK in hand.
    --
    To install apps doesn't take much effort but to debug when an app
    doesn't install takes enough knowledge to solve what comes up at us.
    --- Synchronet 3.21b-Linux NewsLink 1.2