$ edge-fix/build.sh Edge_Canary.apks

Custom Edge Canary Build

A debloated browser with the tracking ripped out

Manifest surgery · DEX method stubs · native lib neutralization · URL redirection

# What It Strips

64 manifest removals

4 tracking permissions (AD_ID, ADSERVICES, RECEIVE_SMS), 4 device-ID vendor queries, 27 Adjust/HMS/Xiaomi/Firebase/Citrix/KOOM components, 29 telemetry meta-data entries

25 DEX method stubs

OneAuth token sharing, Intune MAM handlers, OneDS telemetry, Microsoft LogManager (5), Adjust SDK (10), Tencent Matrix tracers — across 3 DEX files

15 native libs stripped

Citrix ctxlog/log4cpp/SSL, KOOM heap dump, Tencent trace-canary, Crashpad, ARCore, OAID, Bing opus (~36MB). Plus 12 System.loadLibrary() calls NOP'd

35 telemetry URLs

OneCollector + 9 ARIA collectors, 8 Adjust domains, App Center, ECS flags, Google Analytics, AdMob, OAID, 6 Xiaomi endpoints — all redirected to 127.0.0.1

# Full Tracker Breakdown

Every analytics SDK, push framework, MDM hook and telemetry endpoint the pipeline neutralizes, by vendor. The exact lists live in edge-fix/config/.

Microsoft OneDS / ARIA / OneCollector

Cross-app analytics + telemetry event collection

11 collector endpoints → 127.0.0.1; LogManager initialize/flush/uploadNow/setTransmitProfile stubbed; OneDS init + native loader stubbed

Microsoft OneAuth token sharing

Shares signed-in auth tokens across Microsoft apps

registerTokenSharing() stubbed; token_share_* meta-data removed

Microsoft Intune MAM

Mobile app-management / MDM enrolment hooks

4 background handlers stubbed (onHandleIntent, onStartCommand, onReceive, onCreate); MAMSDKVersion meta-data removed

Adjust SDK

Install attribution + ad/marketing analytics

Auto-init content provider dropped; 10 API methods stubbed; 8 .com/.io domains → 127.0.0.1; OAID loader NOP'd

Google Firebase / DataTransport

Cloud messaging + analytics transport

5 components + CctBackendFactory removed; 7 Firebase registrar meta-data removed; google-analytics.com → 127.0.0.1

Google AD_ID / AdServices / AdMob

Advertising identifier + attribution API

AD_ID + ACCESS_ADSERVICES_ATTRIBUTION + install-referrer permissions removed; AdMob gen_204 ping → 127.0.0.1

Huawei HMS / AGConnect

Push + analytics (China region)

8 components + 7 meta-data removed; com/huawei/hms + agconnect class trees deleted; HMS cert assets stripped

Xiaomi Push / MiPush

Push messaging (China region)

7 components + 4 meta-data removed; xiaomi/push + mipush class trees deleted; 6 endpoints → 127.0.0.1

Tencent Matrix

Performance / ANR trace-canary instrumentation

3 tracer onAlive() methods stubbed; libtrace-canary.so stripped + loadLibrary NOP'd

KOOM (Kuaishou)

Heap monitoring + memory-dump capture

HeapAnalysisService removed; 3 koom .so stripped; loadLibrary NOP'd

Citrix MVPN / MAM

MITM proxy + secure-storage providers

4 components removed; ctxlog/log4cpp/CoreSdkCrypto/fullsslsdk stripped; loadLibrary NOP'd

Device-ID probes (MSA/Samsung/Coolpad/OPPO/OAID)

Hardware advertising-ID resolution

4 <queries> package probes removed; libmsaoaidsec/auth stripped; CertChecker loadLibrary NOP'd

App Center + ECS

Crash reporting + remote experiment flags

in.appcenter.ms + config.edge.skype.com → 127.0.0.1

Chromium Crashpad

Native crash-dump upload

libchrome_crashpad_handler + trampoline stripped

Misc native code

ARCore, Bing speech (opus), learning-tools, RECEIVE_SMS, GMS revocation, Play-stamp metadata

Libs stripped; permission + RevocationBoundService removed; stamp/split meta-data removed

# The Pipeline

A 6-step orchestrator copies the original APK and replaces only the patched files (DEX + manifest), preserving every resource, native lib and unmodified DEX byte-for-byte.

1
patch-manifest.py

XML-based manifest surgery — drops tracking permissions and analytics components

2
stub-method.py

Replaces 23 telemetry method bodies with safe return defaults via smali

3
neutralize-loadlibrary.py

NOPs System.loadLibrary() calls in 5 native-backed classes

4
replace-strings.py

Rewrites 30+ telemetry endpoint URLs to 127.0.0.1, strips tracker class trees + unused native libs

5
zipalign + apksigner

Re-aligns and re-signs the split APK bundle with a stable keystore

6
APKEditor.jar

Merges base + splits into a single installable APK and re-signs it

# Patch Your Own — From the Canary You Already Have

No APKMirror download, no AppManager export. build-from-device.sh pulls the split APKs from the Edge Canary already installed on your phone over ADB, runs the full pipeline, and (optionally) installs the result back in place.

# clone, then from edge-fix/:
# build only — output lands in output/
~ $ ./build-from-device.sh
# build AND update in place — preserves your Edge data
~ $ ./build-from-device.sh --install
# target a specific device when several are connected
~ $ ./build-from-device.sh -s 192.168.0.190:38465 --install
pulled 4 APKs · patched · merged · re-signed
updated com.microsoft.emmx.canary · data preserved

First switch from the Play Store build still needs an uninstall (its signature differs from yours, so Android wipes data). After that, every rebuild updates in place because it's signed with your stable edge-fix.keystore. Needs ADB + the same build prerequisites below.

# Build From Source

# Auto-detect the latest Edge Canary .apks from AppManager exports
~ $ ./build.sh
# Or pass an input bundle explicitly
~ $ ./build.sh /path/to/Edge_Canary_VERSION.apks
patched manifest · 25 stubs · 15 libs stripped
stripped 64 manifest entries · merged + re-signed APK → output/
~ $

Needs apktool 2.10+, zipalign + apksigner, python3, JDK 11+, and the baksmali/smali 3.0.9 fat jars. A signing keystore auto-generates on first run — keep it stable for in-place updates.

# Install

The build produces a single merged APK (easiest — installs with any installer) and the 4-part split bundle. The first install from your keystore requires uninstalling the Play Store version (signature mismatch wipes Edge data). No ADB? Use SAI or Quick Share.

# first install — wipes data (signature mismatch)
~ $ adb uninstall com.microsoft.emmx.canary
~ $ adb install output/EdgeCanary-VERSION-privacy-merged.apk
# …or the split bundle
~ $ adb install-multiple \
output/EdgeCanary-VERSION-privacy.apk \
output/signed/split_chrome.apk \
output/signed/split_config.en.apk \
output/signed/split_on_demand.apk

In-place update — no data wipe

Already on a build signed with the same keystore? Android accepts the update because the signatures match — bookmarks, logins and settings are preserved. Don't uninstall first; keep edge-fix.keystore stable.

~ $ adb install -r output/EdgeCanary-VERSION-privacy-merged.apk

# Known Limitations

classes4.dex is unpatched

Interfaces with static methods cause IncompatibleClassChangeError after a baksmali/smali round-trip. Three URLs remain active (variations seed, an already-invalid crash domain, rewards API).

Chromium UMA metrics

Baked into native .so libs with no Java entry point to stub.

User-configurable telemetry

Account sync, search suggestions and Copilot features are runtime Edge settings — disable them in-app.