Expo config plugin: programmatically merge backup-rules exclusions into host app manifest
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 42/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- android, react-native
- Ambito
- build-system, mobile
Direzione di ricerca
Inizia da android/src/main/AndroidManifest.xml, dalla sezione Configure for Android di README.md e dalla configurazione del modulo Expo del repository per determinare dove devono trovarsi i plugin pubblicati e come vengono registrati. Esamina le responsabilità proposte di withDangerousMod e withAndroidManifest, quindi definisci fixture per host senza regole, con esclusioni esistenti e con conflitti. Il lavoro è completato quando i controlli di accettazione hanno esito positivo, incluse esecuzioni pulite e ripetute di expo prebuild e l'aggiornamento di README.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Context
@comapeo/core-react-native is published as an Expo module. The
library currently declares android:dataExtractionRules and
android:fullBackupContent on its <application> element to exclude
the rootkey-bearing SharedPreferences from cloud backup and
device-to-device transfer (see android/src/main/AndroidManifest.xml,
PR #36, comment thread on backup-rules merge conflict).
Host apps that already declare these attributes get a manifest-merger
conflict and must manually:
- Merge the library's exclusions into their own backup-rules XML.
- Add
tools:replace="android:dataExtractionRules,android:fullBackupContent"to their<application>tag.
This is documented in README.md > Configure for Android > Backup-rules merge conflict but it's still a friction point at integration time
and easy to forget when iterating.
Proposal
An Expo config plugin that runs at expo prebuild time and:
- Adds the library's backup-rules XML files to the host app's
res/xml/directory (or makes them resolvable via the library
AAR — they're already there, but the plugin can verify). - Reads the host app's existing backup-rules XML if any.
- Default Expo template apps don't set these → plugin sets the
attributes on the host's<application>and copies our XML files
in. No conflict because the host had no prior declaration. - Host already has rules → plugin parses the host's XML, merges our
<exclude domain="sharedpref" path="comapeo-core.xml" />entries
into the right sections (<cloud-backup>,<device-transfer>,
<full-backup-content>), writes the merged XML back, and ensures
the<application>attributes still point at it.
- Default Expo template apps don't set these → plugin sets the
- Removes the attributes from the library's own
AndroidManifest.xml so there's never a merge conflict —
responsibility shifts entirely to the host manifest, which the
plugin owns at prebuild time.
For non-Expo (bare-RN-without-Expo) consumers, the README path stays
the canonical fix.
Why this is worth doing
- Eliminates a build-time integration step for the largest class of
consumers (managed-Expo apps). - Removes the manifest-merger conflict for any consumer that has its
own backup rules — friction point disappears entirely. - Keeps secure-by-default: forgetting to register the plugin is the
only way to lose the exclusion, and that's discoverable via a
smoke test (the encrypted SharedPreferences ends up in backups).
Cost
Roughly 100–150 LOC of plugin code plus tests:
withDangerousModfor the XML file copy / merge step.withAndroidManifestfor the<application>attribute add /
tools:replacehandling.- An XML-merge helper that's safe against repeated invocations
(expo prebuildruns are idempotent in the rest of the toolchain;
this plugin should be too). - A test fixture covering: (a) host with no rules, (b) host with
rules that already have our exclusions, (c) host with rules that
conflict.
Acceptance
- Plugin lives in
plugins/(or wherever published Expo plugins
go in this repo) and is auto-registered when the package is
installed. -
expo prebuild --cleanon a fresh Expo template + this module
produces a host manifest with our exclusions, no conflicts. -
expo prebuild --cleanon an Expo template that ALREADY has
backup rules merges our exclusions in non-destructively. - Re-running prebuild is idempotent — no duplicate
<exclude>
entries, no togglingtools:replace. - Library's own
AndroidManifest.xmlno longer declares the
backup attributes once the plugin path is verified end-to-end. -
README.md > Configure for Androidupdates to reflect that
Expo consumers need do nothing; bare-RN consumers follow the
manual path.
Open questions
- Should the plugin be opt-in (consumer adds it to their
app.json
plugins array) or auto-registered (viaexpo-module.config.json)?
Auto is friendlier; opt-in is more explicit. - What should the plugin do if it detects an existing
tools:replace="android:dataExtractionRules"on the host? Mostly:
nothing, because the host has explicitly opted out of merging.
Log a warning suggesting they include our exclusions. - How do bare-RN consumers (no Expo) interact with this? They
continue to follow the README path; the plugin doesn't apply.
- Lingua principale
- Kotlin
- Stelle
- 1
- Fork
- 0
- Merge medio
- 1g 6h
- PR unite (30g)
- 5
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di digidem/comapeo-core-react-native
-
area: ios priority: P1
Difficoltà 2/5 Mezza giornata Idoneità per principianti 70/100
digidem/comapeo-core-react-native#21 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
digidem/comapeo-core-react-native#254 ·
I maintainer di solito rispondono entro 1 giorno
-
chore: recover from backend restarts via backend-owned project lifecycle (tracking)Forse di nuovo libera @RangerMauve l’ha presa 66 giorni fa e non c’è nessuna pull request aperta. Aperta
digidem/comapeo-core-react-native#247 · 2 commenti · 2 assegnatari ·
I maintainer di solito rispondono entro 1 giorno
-
refactor(android): retire the control socket for a bound Messenger between the FGS and main processAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
digidem/comapeo-core-react-native#245 ·
I maintainer di solito rispondono entro 1 giorno
-
refactor(sentry): deliver Node telemetry to the native SDK through the addon, not the control socketAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
digidem/comapeo-core-react-native#244 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di digidem/comapeo-core-react-native
Issue simili
-
index-request triaged
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
JetBrains/klibs-io#611 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
移动端下载页实时吞吐与筛选栏滚动层级不一致Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 3 giorni
-
afk-ok area:ci size:S
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
enorm-labs/event-junkie#4518 ·
I maintainer di solito rispondono entro 1 giorno
-
android:player
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno