Bluesky app fork with some witchin' additions 💫

Make Android app start faster by disabling JS bundle compression (#7751)

* perf: Disable Android compression to speed up app startup

* fix: Fix the gradle plugin

authored by

Marc Rousavy and committed by
GitHub
326445d3 40d05ac8

+71
+1
app.config.js
··· 242 242 './plugins/withAndroidStylesAccentColorPlugin.js', 243 243 './plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js', 244 244 './plugins/withAndroidNoJitpackPlugin.js', 245 + './plugins/withNoBundleCompression.js', 245 246 './plugins/shareExtension/withShareExtensions.js', 246 247 './plugins/notificationsExtension/withNotificationsExtension.js', 247 248 './plugins/withAppDelegateReferrer.js',
+70
plugins/withNoBundleCompression.js
··· 1 + const {withAppBuildGradle} = require('@expo/config-plugins') 2 + 3 + /** 4 + * A Config Plugin to disable bundle compression in Android build.gradle. 5 + * @param {import('@expo/config-plugins').ConfigPlugin} config 6 + * @returns {import('@expo/config-plugins').ConfigPlugin} 7 + */ 8 + module.exports = function withNoBundleCompression(config) { 9 + return withAppBuildGradle(config, androidConfig => { 10 + let buildGradle = androidConfig.modResults.contents 11 + 12 + const hasAndroidResources = buildGradle.includes('androidResources {') 13 + const hasNoCompress = buildGradle.includes('noCompress') 14 + 15 + if (hasAndroidResources) { 16 + if (hasNoCompress) { 17 + if ( 18 + buildGradle.includes('noCompress += ["bundle"]') || 19 + buildGradle.includes("noCompress += 'bundle'") || 20 + buildGradle.includes('noCompress += "bundle"') 21 + ) { 22 + return androidConfig 23 + } 24 + 25 + const lines = buildGradle.split('\n') 26 + const modifiedLines = lines.map(line => { 27 + if (line.trim().startsWith('noCompress')) { 28 + if (line.includes('+=')) { 29 + return line.replace(/\]/, ', "bundle"]') 30 + } else if (line.includes('=')) { 31 + return line.replace('=', '+= ["bundle",') + ']' 32 + } 33 + } 34 + return line 35 + }) 36 + androidConfig.modResults.contents = modifiedLines.join('\n') 37 + } else { 38 + const androidResources = buildGradle.indexOf('androidResources {') 39 + if (androidResources === -1) { 40 + throw new Error( 41 + `Cannot find androidResources { block in build.gradle!`, 42 + ) 43 + } 44 + const insertPosition = buildGradle.indexOf('\n', androidResources) + 1 45 + const newContent = 46 + buildGradle.slice(0, insertPosition) + 47 + ' noCompress += ["bundle"]\n' + 48 + buildGradle.slice(insertPosition) 49 + 50 + androidConfig.modResults.contents = newContent 51 + } 52 + } else { 53 + const androidBlock = buildGradle.indexOf('android {') 54 + if (androidBlock === -1) { 55 + throw new Error(`Cannot find android { block in build.gradle!`) 56 + } 57 + const insertPosition = buildGradle.indexOf('\n', androidBlock) + 1 58 + const newContent = 59 + buildGradle.slice(0, insertPosition) + 60 + ' androidResources {\n' + 61 + ' noCompress += ["bundle"]\n' + 62 + ' }\n' + 63 + buildGradle.slice(insertPosition) 64 + 65 + androidConfig.modResults.contents = newContent 66 + } 67 + 68 + return androidConfig 69 + }) 70 + }