DivestOS/Misc/Features/Hamper_Analytics.txt
Tad 6329922104 Disable the Hamper Analytics patches
Rely on the HOSTS to do any blocking.
With the last update this causes app crashes, due to boolean/string mismatch.
Need to figure out exactly how string in manifest can become a boolean when wanted.

Signed-off-by: Tad <tad@spotco.us>
2022-01-23 16:55:24 -05:00

178 lines
12 KiB
Plaintext

It turns out some ad/analytics SDKs used by various proprietary Android apps can be disabled/kneecapped by adding meta-data entries to the apps AndroidManifest
In order for an app to read its meta-data entries from its own AndroidManifest it actually has to go through the getPackageManager() call
This means we can change the system package parser and simply add these variables to every app
This would hopefully make usage of proprietary apps more private, granted they are still proprietary and can very well simply ignore these
A simple app was created to verify the expected
05-21 05:24:44.557 4973 4973 D MDT : firebase_analytics_collection_enabled:false
and it does indeed work!
core/java/android/content/pm/PackageParser.java
parseMetaData()
line 5526 if (data == null) {
src/com/android/settings/SecuritySettings.java
res/xml/security_settings_misc.xml
<SwitchPreference
android:key="hamper_analytics"
android:persistent="false"
android:title="@string/hamper_analytics"
android:summary="@string/hamper_analytics_summary"/>
res/values/strings.xml
<string name="hamper_analytics">Hamper analytics SDKs</string>
<string name="hamper_analytics_summary">Aggressively breaks various proprietary tracking SDKs by unsetting their API keys. May cause low-quality proprietary apps to crash.</string>
Keywords to find keys
"meta-data android:name" analytics
"meta-data android:name" app id
"meta-data android:name" disable
"meta-data android:name" gdpr
"meta-data android:name" location
"meta-data android:name" opt-out
"meta-data android:name" private key
"meta-data android:name" secret key
Documentation
http://docs-en.tnkad.net/analytics-reporting/1-android-integration
https://developer.android.com/guide/webapps/managing-webview
https://developer.clevertap.com/docs/android
https://developer.clevertap.com/docs/android-quickstart-guide
https://developer.clevertap.com/docs/sdk-changes-for-gdpr-compliance
https://developers.facebook.com/docs/app-events/getting-started-app-events-android
https://developers.google.com/admob/ump/android/quick-start
https://dev.followanalytics.com/sdks/android/older-versions/6.1/
https://docs.bugsnag.com/platforms/android/configuration-options/
https://docs.bugsnag.com/platforms/android/legacy/configuration-options/
https://docs.microsoft.com/en-us/dynamics365/customer-insights/engagement-insights/get-started-android
https://docs.netcoresmartech.com/v1.0/docs/android-sdk-v2-advanced
https://docs.pushwoosh.com/platform-docs/v/master/pushwoosh-sdk/cross-platform-frameworks/adobe-air
https://documentation.accengage.com/sdk/android/3.6/migration/
https://firebase.google.com/docs/analytics/configure-data-collection
https://firebase.google.com/docs/crashlytics/customize-crash-reports
https://github.com/bugsnag/bugsnag-android
https://github.com/mapbox/mapbox-events-android/pull/77/files
https://github.com/mixpanel/mixpanel-android/blob/master/src/main/java/com/mixpanel/android/mpmetrics/MPConfig.java
https://help.batch.com/en/articles/5204072-how-to-integrate-batch-into-my-cmp
https://help.upsight.com/api_sdk_reference/android/
https://techdocs.broadcom.com/us/en/ca-enterprise-software/it-operations-management/app-experience-analytics/17-3/using/using-apis/android-custom-apis/Supported-Meta-Data-Properties.html
Currently Implemented
data.putString("acc_advertiser_id", "false");
data.putString("acc_no_geoloc", "true");
data.putString("acc_tracking_mode", "Restricted");
data.putString("android.webkit.WebView.MetricsOptOut", "true");
data.putString("AXACollectIp", "false");
data.putString("batch_opted_out_by_default", "true");
data.putString("CLEVERTAP_BACKGROUND_SYNC", "0");
data.putString("CLEVERTAP_USE_GOOGLE_AD_ID", "0");
data.putString("com.ad4screen.advertiser_id", "false");
data.putString("com.ad4screen.no_geoloc", "true");
data.putString("com.ad4screen.tracking_mode", "Restricted");
data.putBoolean("com.bugsnag.android.AUTO_CAPTURE_SESSIONS", false);
data.putBoolean("com.bugsnag.android.AUTO_DETECT_ERRORS", false);
data.putBoolean("com.bugsnag.android.AUTO_TRACK_SESSIONS", false);
data.putBoolean("com.bugsnag.android.DETECT_ANR", false);
data.putBoolean("com.bugsnag.android.DETECT_NDK_CRASHES", false);
data.putBoolean("com.bugsnag.android.ENABLE_EXCEPTION_HANDLER", false);
data.putBoolean("com.bugsnag.android.PERSIST_USER_BETWEEN_SESSIONS", false);
data.putBoolean("com.bugsnag.android.PERSIST_USER", false);
//data.putString("com.bugsnag.android.SEND_THREADS", "NEVER");
data.putBoolean("com.bugsnag.android.SEND_THREADS", false);
data.putString("com.facebook.sdk.AdvertiserIDCollectionEnabled", "false");
data.putString("com.facebook.sdk.AutoInitEnabled", "false");
data.putString("com.facebook.sdk.AutoLogAppEventsEnabled", "false");
data.putString("com.followanalytics.message.inapp.enable", "false");
data.putString("com.followanalytics.message.push.enable", "false");
data.putBoolean("com.google.android.gms.ads.AD_MANAGER_APP", false);
data.putBoolean("com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT", true);
data.putString("com.mapbox.EnableEvents", "false");
data.putString("com.microsoft.engagementinsights.autoCapture", "false");
data.putBoolean("com.mixpanel.android.MPConfig.AutoCheckForSurveys", false);
data.putBoolean("com.mixpanel.android.MPConfig.AutoShowMixpanelUpdates", false);
data.putBoolean("com.mixpanel.android.MPConfig.DisableAppOpenEvent", true);
data.putBoolean("com.mixpanel.android.MPConfig.DisableDecideChecker", true);
data.putBoolean("com.mixpanel.android.MPConfig.DisableExceptionHandler", true);
data.putBoolean("com.mixpanel.android.MPConfig.DisableFallback", true);
data.putBoolean("com.mixpanel.android.MPConfig.DisableViewCrawler", true);
data.putBoolean("com.mixpanel.android.MPConfig.TestMode", true);
data.putBoolean("com.mixpanel.android.MPConfig.UseIpAddressForGeolocation", false);
data.putString("com.sprooki.LOCATION_SERVICES", "disable");
data.putString("com.webengage.sdk.android.location_tracking", "false");
data.putString("firebase_analytics_collection_deactivated", "true");
data.putString("firebase_analytics_collection_enabled", "false");
data.putString("firebase_crash_collection_enabled", "false");
data.putBoolean("firebase_crashlytics_collection_enabled", false);
data.putString("firebase_performance_collection_deactivated", "true");
data.putString("google_analytics_adid_collection_enabled", "false");
data.putString("google_analytics_automatic_screen_reporting_enabled", "false");
data.putString("google_analytics_default_allow_ad_personalization_signals", "false");
data.putString("google_analytics_ssaid_collection_enabled", "false");
data.putString("SMT_USE_AD_ID", "0");
data.putString("tapjoy.disable_advertising_id_check", "true");
data.putString("tapjoy.disable_android_id_as_analytics_id", "true");
data.putString("tapjoy.disable_automatic_session_tracking", "true");
data.putString("tapjoy.disable_persistent_ids", "true");
data.putString("tapjoy.disable_video_offers", "true");
data.putString("tnkad_tracking", "false");
Settings
data.putString("engagement:adm:register", "false");
data.putString("engagement:connection:delay", "2629800");
data.putString("engagement:locationReport:lazyArea", "false");
data.putString("engagement:locationReport:realTime:background", "false");
data.putString("engagement:locationReport:realTime", "false");
data.putString("engagement:locationReport:realTime:fine", "false");
data.putString("engagement:log:test", "false");
data.putString("engagement:reportCrash", "false");
data.putString("FYBEnableSSLRewardedVideo", "true");
data.putString("mceSessionEnabled", "false");
data.putString("PW_BROADCAST_PUSH", "false");
API Keys
String apiFillerValue = "DO_NOT_TRACK";
data.putString("apptentive_api_key", apiFillerValue);
data.putString("apptentive_key", apiFillerValue);
data.putString("apptentive_signature", apiFillerValue);
data.putString("BUGLY_APPID", apiFillerValue);
data.putString("__ChartboostAir__AppID", apiFillerValue);
data.putString("__ChartboostAir__AppSignature", apiFillerValue);
data.putString("CLEVERTAP_ACCOUNT_ID", apiFillerValue);
data.putString("CLEVERTAP_TOKEN", apiFillerValue);
data.putString("com.a0soft.gphone.aTrackDog.webURL", apiFillerValue);
data.putString("com.ad4screen.facebook_appid", apiFillerValue);
data.putString("com.ad4screen.partnerid", apiFillerValue);
data.putString("com.ad4screen.privatekey", apiFillerValue);
data.putString("com.ad4screen.senderid", apiFillerValue);
data.putString("com.appsee.ApiKey", apiFillerValue);
data.putString("com.blueshift.gcm_sender_id", apiFillerValue);
data.putString("com.bugsnag.android.API_KEY", apiFillerValue);
data.putString("com.crashlytics.ApiKey", apiFillerValue);
data.putString("com.facebook.sdk.ApplicationId", apiFillerValue);
data.putString("com.geouniq.appkey", apiFillerValue);
data.putString("com.google.android.awareness.API_KEY", apiFillerValue);
data.putString("com.google.android.gms.ads.APPLICATION_ID", apiFillerValue);
data.putString("com.huawei.hms.client.appid", apiFillerValue);
data.putString("com.huawei.hms.client.cpid", apiFillerValue);
data.putString("com.indooratlas.android.sdk.API_KEY", apiFillerValue);
data.putString("com.indooratlas.android.sdk.API_SECRET", apiFillerValue);
data.putString("com.microsoft.engagementinsights.ingestionKey", apiFillerValue);
data.putString("com.pushwoosh.appid", apiFillerValue);
data.putString("com.pushwoosh.senderid", apiFillerValue);
data.putString("com.tapjoy.appstore", apiFillerValue);
data.putString("com.upsight.app_token", apiFillerValue);
data.putString("com.upsight.fcm.api.key", apiFillerValue);
data.putString("com.upsight.fcm.application.id", apiFillerValue);
data.putString("com.upsight.public_key", apiFillerValue);
data.putString("com.webengage.sdk.android.key", apiFillerValue);
data.putString("co.paystack.android.PublicKey", apiFillerValue);
data.putString("FAID", apiFillerValue);
data.putString("io.branch.sdk.BranchKey", apiFillerValue);
data.putString("io.emma.SESSION_KEY", apiFillerValue);
data.putString("io.fabric.ApiKey", apiFillerValue);
data.putString("net.hockeyapp.android.appIdentifier", apiFillerValue);
data.putString("net.hockeyapp.android.appSecret", apiFillerValue);
data.putString("pilgrim_sdk_key", apiFillerValue);
data.putString("pilgrim_sdk_secret", apiFillerValue);
data.putString("presage_key", apiFillerValue);
data.putString("tkbl-api-key-0", apiFillerValue);
data.putString("tnkad_app_id", apiFillerValue);