The Ditto SDK for Android is a fairly large package. The bulk of the size is made up of native binaries compiled from native Rust code which - unlike Kotlin and Java - need to be compiled for each CPU type (ABI) that the SDK will be used on. We currently support all 4 ABIs supported by the Android NDK. This means that there are 4 native binaries included inside the Android archive .aar file we publish to Maven Central.Below are various options to reduce the size of your application package. These change aspects of the Ditto SDK as it is included inside your app’s final .apk file.
If you publish your app to the Google Play Store, the easiest way to reduce your app size is to package your app as an Android App Bundle. This format allows Google Play to generate optimized APKs for each device configuration so that users download packages streamlined for their specific device.
If your app is distributed privately to enterprise users via an MDM system, check with your MDM vendor to see whether they integrate with Managed Google Play. If so, they may support Android App Bundles (.aab files) and automatic package optimization.However, if your MDM system does not support this, there are several options for manually optimizing the size of your app package.
The native binaries included with the Android Ditto SDK are included in an app’s package in uncompressed form by default. However, setting the useLegacyPackaging value to true in your app’s Gradle configuration will change this to store the binaries in compressed form. Compressed binaries will take up less space and help to reduce the app’s final .apk file size.In your app’s build.gradle(.kts) file, add the following jniLibs block inside the packaging block.
Compressed binaries has shown to reduce a simple demo app’s size by 50%.This useLegacyPackaging build option can also be controlled using the (deprecated)android:extractNativeLibs attribute on the <application> element in the Android manifest. This option used to be available using the android.bundle.enableUncompressedNativeLibs Gradle property.
While this useLegacyPackaging option can help to reduce your final .apk file size, it is important to be aware of the side effects of changing this setting and to test your application to understand how it will behave.
Increased app launch time as compressed binaries need to be decompressed.
Increased app install size as uncompressed binaries are copied into app’s data directory.
App updates through the Google Play Store will be larger.
If your app does not need to support all of the different types of CPUs (ABIs) that the Ditto SDK supports, you can configure your build to exclude the unwanted files. There are two main approaches to this. The first is to just exclude the one or more ABIs that you don’t want. The second approach is more extreme and involves building multiple APKs, each with only a single ABI, but it is more complicated to deploy.Including only a single ABI has shown to reduce a simple demo app’s size by 70%.
In order to use either of these approaches you need to understand the CPU architecture (ABI) of all the devices you will be deploying your app to. Excluding the ABI for a device and then attempting to run the app on a device that uses the missing ABI will cause the Ditto SDK to crash.
This approach is very simple and just excludes one or more Ditto native binaries from your app package.In your app’s build.gradle(.kts) file, add an ndk block inside the defaultConfig block like so:
The example snippet above adds all 4 ABIs that are contained in the Ditto Android SDK. Reduce this list to just the ABIs of the devices that your app is deployed to. Android devices with Intel CPUs (x86* ABIs) are rare nowadays, but Chromebooks often have these types of CPUs.For more details about this ndk.abiFilters configuration, see Generate Code for a specific ABI.
This is the most involved process but it yields the absolute smallest APK size possible. There are several caveats with this approach but it may be necessary if your deployment system has very limited requirements.Add the following splits block to your app’s build.gradle(.kts) file inside the android block.
The above configuration will generate a separate APK for each ABI listed above in the include configuration. You may remove any ABIs that your environment doesn’t need.For more details see about the splits.abi Gradle configuration, see Configure multiple APKs for ABIs.Note that the Google Play Store requires each APK you publish to have a unique versionCode. Check with your MDM system’s requirements as to what their app versioning policies are. A strategy for generating a unique versionCode for each APK is detailed in the Build multiple APKs guide. For more information about this topic, see Assigning version codes.
Single-ABI APKs need to be carefully deployed to the correct devices via MDM.
APK versioning can be more complicated, depending on your MDM system’s requirements.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ditto","colors":{"primary":"#1E1E1E","light":"#F6F6F6","dark":"#1E1E1E"},"logo":{"light":"https://mintcdn.com/ditto-248bc0d1/u_USsYZWDik2feFj/logo/ditto-dark.svg?fit=max\u0026auto=format\u0026n=u_USsYZWDik2feFj\u0026q=85\u0026s=d835cb30d8f1cdedf44672a712e52ed2","dark":"https://mintcdn.com/ditto-248bc0d1/u_USsYZWDik2feFj/logo/ditto-light.svg?fit=max\u0026auto=format\u0026n=u_USsYZWDik2feFj\u0026q=85\u0026s=485f7a6b8ded70a8b3458ca62383883f"},"favicon":"https://mintcdn.com/ditto-248bc0d1/tCfSF1TTvWS_3XsC/favicon.png?fit=max\u0026auto=format\u0026n=tCfSF1TTvWS_3XsC\u0026q=85\u0026s=06b307a481752b4765930fc23d247612","api":{"playground":{"display":"simple"},"examples":{"languages":["curl"]}},"navbar":{"links":[{"icon":"clipboard-list","href":"/release-notes","label":"Release Notes"},{"href":"https://support.ditto.com","label":"Support"}],"primary":{"type":"button","label":"Start Free","href":"https://portal.ditto.live/create-account?_gl=1*1bow2wn*_ga*NTY3MzI4MDE4LjE3Mjc3NjM2Njg.*_ga_D8PMW3CCL2*MTcyNzc2MzY2Ny4xLjAuMTcyNzc2MzY2Ny42MC4wLjA."}},"footer":{"socials":{"x":"https://www.twitter.com/dittolive","github":"https://github.com/getditto","linkedin":"https://www.linkedin.com/company/dittolive"}},"fonts":{"heading":{"family":"Inter","weight":500},"body":{"family":"Inter"}},"styling":{"eyebrows":"section","latex":false},"integrations":{"gtm":{"tagId":"GTM-WCZQB8FP"}},"banner":{"content":"📣 The Ditto Developer Survey is now live! [Take the survey](https://tally.so/r/Np9ZdN).","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ditto-248bc0d1","hasAudioNarration":false,"actualSubdomain":"ditto-248bc0d1","customDomains":["docs.ditto.live"],"gitSource":{"type":"github","owner":"getditto","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4ee1e8d83f6c2faab4eb2","collectionId":"a0099038-30fd-478e-8c7b-defacd43d31f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4ee1e8d83f6c2faab4eb2"},"feedback":{"thumbs":true,"issues":true,"contextualFeedback":{"allowEmail":true}},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4ee1e8d83f6c2faab4eb2","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Build with the SDK","count":209},{"language":"default","tag":"SDKs","count":77},{"language":"default","tag":"Reference","count":53},{"language":"default","tag":"Overview \u0026 Setup","count":33},{"language":"default","tag":"Query Language (DQL)","count":32},{"language":"default","tag":"Cloud Platform","count":30},{"language":"default","tag":"Deploying your App","count":23},{"language":"default","tag":"Migration Guides","count":20},{"language":"default","tag":"Getting Started","count":17},{"language":"default","tag":"Accessing Data","count":16}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@font-face{font-family:'Kairos Sans';src:url(https://cdn.prod.website-files.com/6761335affb7c1ca9aae00dd/676134b94c85d94594f80209_KairosSans_Variable.ttf);font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:'Aeonik Fono';src:url(https://cdn.prod.website-files.com/6761335affb7c1ca9aae00dd/6761352bf250ec43e156773b_AeonikFono-Medium.woff2);font-display:swap;font-weight:400;font-style:normal}#header a,#navbar a,#table-of-contents,.eyebrow,a.card.block h2,button{font-family:'Aeonik Fono';text-transform:uppercase}#header p{font-weight:500}h1{font-family:'Kairos Sans';letter-spacing:normal!important;font-variation-settings:\"wdth\" 112}a.card.block h2{font-weight:400}html[data-current-path^=\"/sdk/v4\"] header a[href=\"/release-notes\"]{display:none}.prose .rn-overview a{border-bottom:0;font-weight:500}.prose .rn-overview a:focus-visible,.prose .rn-overview a:hover,.prose .rn-summary a:focus-visible,.prose .rn-summary a:hover{border-bottom:1px solid rgb(var(--primary))}.prose .rn-summary a{border-bottom:0}"}],"page":{"pagePath":"best-practices/optimizing-bundle-sizes-for-android","slug":"/best-practices/optimizing-bundle-sizes-for-android","pageMetadata":{"title":"Optimizing Bundle Sizes for Android","description":null,"href":"/best-practices/optimizing-bundle-sizes-for-android"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tab,Tabs,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`ditto-sdk-size`,children:`Ditto SDK Size`}),`\n`,_jsxs(_components.p,{children:[`The Ditto SDK for Android is a fairly large package. The bulk of the size is made up of native binaries compiled from native Rust code which - unlike Kotlin and Java - need to be compiled for each CPU type (ABI) that the SDK will be used on. We currently support `,_jsx(_components.a,{href:`https://developer.android.com/ndk/guides/abis#sa`,children:`all 4 ABIs`}),` supported by the Android NDK. This means that there are 4 native binaries included inside the Android archive `,_jsx(_components.code,{children:`.aar`}),` file we publish to `,_jsx(_components.a,{href:`https://central.sonatype.com/artifact/live.ditto/ditto/versions`,children:`Maven Central.`})]}),`\n`,_jsxs(_components.p,{children:[`Below are various options to reduce the size of your application package. These change aspects of the Ditto SDK as it is included inside your app’s final `,_jsx(_components.code,{children:`.apk`}),` file.`]}),`\n`,_jsx(Heading,{level:`2`,id:`publishing-to-google-play-store`,children:`Publishing to Google Play Store`}),`\n`,_jsxs(_components.p,{children:[`If you publish your app to the Google Play Store, the easiest way to `,_jsx(_components.a,{href:`https://developer.android.com/topic/performance/reduce-apk-size`,children:`reduce your app size`}),` is to package your app as an `,_jsx(_components.a,{href:`https://developer.android.com/guide/app-bundle`,children:`Android App Bundle`}),`. This format allows Google Play to generate optimized APKs for each device configuration so that users download packages streamlined for their specific device.`]}),`\n`,_jsx(Heading,{level:`2`,id:`publishing-to-private-distribution-channels`,children:`Publishing to Private Distribution Channels`}),`\n`,_jsxs(_components.p,{children:[`If your app is distributed privately to enterprise users via an MDM system, check with your MDM vendor to see whether they integrate with `,_jsx(_components.a,{href:`https://www.android.com/enterprise/management/`,children:`Managed Google Play`}),`. If so, they may support Android App Bundles (`,_jsx(_components.code,{children:`.aab`}),` files) and automatic package optimization.`]}),`\n`,_jsx(_components.p,{children:`However, if your MDM system does not support this, there are several options for manually optimizing the size of your app package.`}),`\n`,_jsx(Heading,{level:`3`,id:`compress-native-binaries`,children:`Compress Native Binaries`}),`\n`,_jsxs(_components.p,{children:[`The native binaries included with the Android Ditto SDK are included in an app’s package in uncompressed form by default. However, setting the `,_jsx(_components.code,{children:`useLegacyPackaging`}),` value to `,_jsx(_components.code,{children:`true`}),` in your app’s Gradle configuration will change this to store the binaries in compressed form. Compressed binaries will take up less space and help to reduce the app’s final `,_jsx(_components.code,{children:`.apk`}),` file size.`]}),`\n`,_jsxs(_components.p,{children:[`In your app’s `,_jsx(_components.code,{children:`build.gradle(.kts)`}),` file, add the following `,_jsx(_components.code,{children:`jniLibs`}),` block inside the `,_jsx(_components.code,{children:`packaging`}),` block.`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Gradle (Groovy)`,id:`gradle-groovy`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`android`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` packagingOptions`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` jniLibs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` useLegacyPackaging`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`tab 2`,id:`tab-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`android`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` packaging`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` jniLibs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` useLegacyPackaging`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]}),`\n`,_jsx(_components.p,{children:`Compressed binaries has shown to reduce a simple demo app’s size by 50%.`}),`\n`,_jsxs(_components.p,{children:[`This `,_jsx(_components.code,{children:`useLegacyPackaging`}),` build option can also be controlled using the (deprecated)`,_jsxs(_components.a,{href:`https://developer.android.com/guide/topics/manifest/application-element#extractNativeLibs`,children:[_jsx(_components.code,{children:`android:extractNativeLibs`}),` attribute`]}),` on the `,_jsx(_components.code,{children:`\u003capplication>`}),` element in the Android manifest. This option used to be available using the `,_jsx(_components.code,{children:`android.bundle.enableUncompressedNativeLibs`}),` Gradle property.`]}),`\n`,_jsx(Heading,{level:`4`,id:`caveats`,children:`Caveats`}),`\n`,_jsxs(_components.p,{children:[`While this `,_jsx(_components.code,{children:`useLegacyPackaging`}),` option can help to reduce your final `,_jsx(_components.code,{children:`.apk`}),` file size, it is important to be aware of the side effects of changing this setting and to test your application to understand how it will behave.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Increased app launch time as compressed binaries need to be decompressed.`}),`\n`,_jsx(_components.li,{children:`Increased app install size as uncompressed binaries are copied into app’s data directory.`}),`\n`,_jsx(_components.li,{children:`App updates through the Google Play Store will be larger.`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`more-details`,children:`More details`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.android.com/topic/performance/reduce-apk-size#extract-false`,children:`Reduce your app size`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.android.com/build/releases/past-releases/agp-4-2-0-release-notes#compress-native-libs-dsl`,children:`Use the DSL to package compressed native libraries`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.android.com/build/releases/past-releases/agp-3-6-0-release-notes#extractNativeLibs`,children:`Native libraries package uncompressed by default`})}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`exclude-unused-cpu-architectures`,children:`Exclude Unused CPU Architectures`}),`\n`,_jsx(_components.p,{children:`If your app does not need to support all of the different types of CPUs (ABIs) that the Ditto SDK supports, you can configure your build to exclude the unwanted files. There are two main approaches to this. The first is to just exclude the one or more ABIs that you don’t want. The second approach is more extreme and involves building multiple APKs, each with only a single ABI, but it is more complicated to deploy.`}),`\n`,_jsx(_components.p,{children:`Including only a single ABI has shown to reduce a simple demo app’s size by 70%.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`In order to use either of these approaches you need to understand the CPU architecture (ABI) of all the devices you will be deploying your app to. Excluding the ABI for a device and then attempting to run the app on a device that uses the missing ABI will cause the Ditto SDK to crash.`})}),`\n`,_jsx(Heading,{level:`4`,id:`single-apk-with-reduced-abis`,children:`Single APK with reduced ABIs`}),`\n`,_jsx(_components.p,{children:`This approach is very simple and just excludes one or more Ditto native binaries from your app package.`}),`\n`,_jsxs(_components.p,{children:[`In your app’s `,_jsx(_components.code,{children:`build.gradle(.kts)`}),` file, add an `,_jsx(_components.code,{children:`ndk`}),` block inside the `,_jsx(_components.code,{children:`defaultConfig`}),` block like so:`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Gradle (Groovy)`,id:`gradle-groovy-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`android {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` defaultConfig {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ndk {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` abiFilters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`clear`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` abiFilters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arm64-v8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"armeabi-v7a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86_64\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Gradle (Kotlin)`,id:`gradle-kotlin`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`android`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ..`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` defaultConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` ndk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abiFilters.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`clear`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abiFilters.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`addAll`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`listOf`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arm64-v8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"armeabi-v7a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86_64\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]}),`\n`,_jsxs(_components.p,{children:[`The example snippet above adds all 4 ABIs that are contained in the Ditto Android SDK. Reduce this list to just the ABIs of the devices that your app is deployed to. Android devices with Intel CPUs (`,_jsx(_components.code,{children:`x86*`}),` ABIs) are rare nowadays, but Chromebooks often have these types of CPUs.`]}),`\n`,_jsxs(_components.p,{children:[`For more details about this `,_jsx(_components.code,{children:`ndk.abiFilters`}),` configuration, see `,_jsx(_components.a,{href:`https://developer.android.com/ndk/guides/abis#gc`,children:`Generate Code for a specific ABI`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`caveats-2`,children:`Caveats`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Your app will crash with message “Native library failed to load” if run on a device that uses an ABI excluded using this method.`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`separate-apks-for-each-supported-abi`,children:`Separate APKs for each Supported ABI`}),`\n`,_jsx(_components.p,{children:`This is the most involved process but it yields the absolute smallest APK size possible. There are several caveats with this approach but it may be necessary if your deployment system has very limited requirements.`}),`\n`,_jsxs(_components.p,{children:[`Add the following `,_jsx(_components.code,{children:`splits`}),` block to your app’s `,_jsx(_components.code,{children:`build.gradle(.kts)`}),` file inside the `,_jsx(_components.code,{children:`android`}),` block.`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Gradle (Groovy)`,id:`gradle-groovy-3`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`android {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` splits {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abi {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` enable `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` reset`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` include`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arm64-v8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"armeabi-v7a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86_64\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` universalApk `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Gradle (Kotlin)`,id:`gradle-kotlin-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`android`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\t..`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` splits`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` abi`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` isEnable `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` reset`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` include`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arm64-v8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"armeabi-v7a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86_64\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"x86\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` isUniversalApk `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]}),`\n`,_jsxs(_components.p,{children:[`The above configuration will generate a separate APK for each ABI listed above in the `,_jsx(_components.code,{children:`include`}),` configuration. You may remove any ABIs that your environment doesn’t need.`]}),`\n`,_jsxs(_components.p,{children:[`For more details see about the `,_jsx(_components.code,{children:`splits.abi`}),` Gradle configuration, see `,_jsx(_components.a,{href:`https://developer.android.com/build/configure-apk-splits#configure-abi-split`,children:`Configure multiple APKs for ABIs`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Note that the Google Play Store requires each APK you publish to have a unique `,_jsx(_components.code,{children:`versionCode`}),`. Check with your MDM system’s requirements as to what their app versioning policies are. A strategy for generating a unique `,_jsx(_components.code,{children:`versionCode`}),` for each APK is detailed in the `,_jsx(_components.a,{href:`https://developer.android.com/build/configure-apk-splits#configure-APK-versions`,children:`Build multiple APKs`}),` guide. For more information about this topic, see `,_jsx(_components.a,{href:`https://developer.android.com/google/play/publishing/multiple-apks#VersionCodes`,children:`Assigning version codes`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`caveats-3`,children:`Caveats`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Single-ABI APKs need to be carefully deployed to the correct devices via MDM.`}),`\n`,_jsx(_components.li,{children:`APK versioning can be more complicated, depending on your MDM system’s requirements.`}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Optimizing Bundle Sizes for Android","description":null,"href":"/best-practices/optimizing-bundle-sizes-for-android"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Ditto SDK Size","slug":"ditto-sdk-size","depth":3,"children":[]},{"title":"Publishing to Google Play Store","slug":"publishing-to-google-play-store","depth":2,"children":[]},{"title":"Publishing to Private Distribution Channels","slug":"publishing-to-private-distribution-channels","depth":2,"children":[{"title":"Compress Native Binaries","slug":"compress-native-binaries","depth":3,"children":[]},{"title":"Caveats","slug":"caveats","depth":4,"children":[]},{"title":"More details","slug":"more-details","depth":4,"children":[]},{"title":"Exclude Unused CPU Architectures","slug":"exclude-unused-cpu-architectures","depth":3,"children":[]},{"title":"Single APK with reduced ABIs","slug":"single-apk-with-reduced-abis","depth":4,"children":[]},{"title":"Caveats","slug":"caveats-2","depth":4,"children":[]},{"title":"Separate APKs for each Supported ABI","slug":"separate-apks-for-each-supported-abi","depth":4,"children":[]},{"title":"Caveats","slug":"caveats-3","depth":4,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/ditto-248bc0d1/370d4f3cd5a1175c/inkeep.js","/_mintlify/custom/ditto-248bc0d1/c260eb4e17881548/release-notes-filters.js"],"subdomain":"ditto-248bc0d1","siteName":"Ditto","title":"Optimizing Bundle Sizes for Android - Ditto","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{"v5":{"href":"/best-practices/optimizing-bundle-sizes-for-android","matchLevel":0},"v4":{"href":"/best-practices/optimizing-bundle-sizes-for-android","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T13:31:54.963Z","originalFileLocation":"best-practices/optimizing-bundle-sizes-for-android.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Ditto\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Optimizing Bundle Sizes for Android - Ditto\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ditto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ditto-248bc0d1.mintlify.app/_mintlify/api/og/v2?division=Resources\u0026amp;title=Optimizing+Bundle+Sizes+for+Android\u0026amp;theme=f28dd55020e1158de447bdec\u0026amp;signature=0d986a7ea9ce6609788d160e75982790b300f950daa6a2d4c7773974ee1f0647\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Optimizing Bundle Sizes for Android - Ditto\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ditto-248bc0d1.mintlify.app/_mintlify/api/og/v2?division=Resources\u0026amp;title=Optimizing+Bundle+Sizes+for+Android\u0026amp;theme=f28dd55020e1158de447bdec\u0026amp;signature=0d986a7ea9ce6609788d160e75982790b300f950daa6a2d4c7773974ee1f0647\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ditto-248bc0d1/9AZ87A7qeePs6thb/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ditto\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1E1E1E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/best-practices/optimizing-bundle-sizes-for-android.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ditto.live/#organization\",\"name\":\"Ditto\",\"url\":\"https://docs.ditto.live\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ditto-248bc0d1/u_USsYZWDik2feFj/logo/ditto-dark.svg?fit=max\u0026auto=format\u0026n=u_USsYZWDik2feFj\u0026q=85\u0026s=d835cb30d8f1cdedf44672a712e52ed2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ditto.live#website\",\"name\":\"Ditto\",\"url\":\"https://docs.ditto.live\",\"publisher\":{\"@id\":\"https://docs.ditto.live/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android#webpage\",\"url\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android\",\"name\":\"Optimizing Bundle Sizes for Android\",\"dateModified\":\"2026-10-30T13:31:54.963Z\",\"isPartOf\":{\"@id\":\"https://docs.ditto.live#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"SDKs\",\"item\":\"https://docs.ditto.live/sdk/latest/quickstarts/swift\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin\",\"item\":\"https://docs.ditto.live/sdk/latest/quickstarts/kotlin-android\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Optimizing Bundle Sizes for Android\",\"item\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android#article\",\"headline\":\"Optimizing Bundle Sizes for Android\",\"name\":\"Optimizing Bundle Sizes for Android\",\"url\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ditto.live/best-practices/optimizing-bundle-sizes-for-android#webpage\"},\"dateModified\":\"2026-10-30T13:31:54.963Z\",\"publisher\":{\"@id\":\"https://docs.ditto.live/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ditto.live#website\"}}]}\u003c/script>","siteName":"Ditto","nav":{"global":null,"tabs":[{"tab":"Getting Started","pages":[{"title":"Getting Started","href":"/home/introduction"}]},{"tab":"Build with the SDK","icon":{"style":"solid","name":"laptop-mobile"},"versions":[{"version":"v5","groups":[{"group":"Overview \u0026 Setup","pages":[{"title":"SDK v5 Homepage","sidebarTitle":"SDK Home","icon":"house","iconType":"solid","mode":"wide","href":"/sdk/latest/home"},{"title":"What's New in Ditto SDK v5","sidebarTitle":"What's New in v5","icon":"rocket","iconType":"solid","href":"/sdk/latest/v5-whats-new"},{"title":"Quickstart Task Apps - Overview","sidebarTitle":"Quickstart","icon":"rabbit","iconType":"solid","mode":"wide","href":"/sdk/latest/quickstarts/quickstarts-landing"},{"title":"Migration Guide for Atlas Device Sync","icon":"arrow-right-arrow-left","iconType":"solid","href":"/sdk/latest/quickstarts/mongodb-migrationguide"}]},{"group":"SDKs","pages":[{"group":"Swift","icon":{"style":"brands","name":"apple"},"pages":[{"title":"Swift Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/swift"},{"title":"Swift","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/swift"},{"title":"Swift Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/swift"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/swift"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Swift V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/swift-v4"},{"title":"Swift Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/swift-dql"}]},{"title":"Swift","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/swift/DittoSwift/5.2.0/api-reference/documentation/dittoswift/","href":"/sdk/latest/api-reference/swift"}]},{"group":"Kotlin","icon":{"style":"brands","name":"android"},"pages":[{"title":"Kotlin for Android Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/kotlin-android"},{"title":"Kotlin Install Guide","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/kotlin"},{"title":"Kotlin Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/kotlin"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/kotlin"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Kotlin V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/kotlin-v4"},{"title":"Kotlin Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","description":"Guide for migrating Kotlin apps from legacy query builder APIs to DQL (Ditto Query Language) syntax.","href":"/sdk/latest/migration-guides/kotlin-dql"}]},{"group":"Resources","icon":{"style":"solid","name":"box-archive"},"pages":[{"title":"Optimizing Bundle Sizes for Android","href":"/best-practices/optimizing-bundle-sizes-for-android"}]},{"title":"Android","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/kotlin/ditto-kotlin/5.2.0/api-reference/","description":null,"href":"/sdk/latest/api-reference/kotlin"}]},{"group":"Flutter","icon":{"style":"brands","name":"flutter"},"pages":[{"title":"Flutter Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/flutter"},{"title":"Flutter Install Guide","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/flutter"},{"title":"Flutter Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/flutter"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/flutter"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Flutter V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/flutter-v4"},{"title":"Flutter Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/flutter-dql"}]},{"title":"Flutter","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://pub.dev/documentation/ditto_live/latest/ditto_live/","href":"/sdk/latest/api-reference/flutter"}]},{"group":"React Native","icon":{"style":"brands","name":"react"},"pages":[{"title":"React Native Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/react-native"},{"title":"React Native","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/react-native"},{"title":"React Native Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/react-native"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/react-native"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"React Native V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/react-native-v4"},{"title":"React Native Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/react-native-dql"}]},{"title":"JavaScript","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/js/Ditto/5.2.0/api-reference/","href":"/sdk/latest/api-reference/js"}]},{"group":"JavaScript Web","icon":{"style":"brands","name":"js"},"pages":[{"title":"JavaScript Web Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/javascript-web"},{"title":"JavaScript","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/js"},{"title":"JavaScript Web Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/js-web"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/javascript-web"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"JavaScript Web V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/web-js-v4"},{"title":"JavaScript Web Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/web-js-dql"}]},{"title":"JavaScript","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/js/Ditto/5.2.0/api-reference/","href":"/sdk/latest/api-reference/js"}]},{"group":"JavaScript Node.js","icon":{"style":"brands","name":"js"},"pages":[{"title":"JavaScript Console App Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/javascript-console"},{"title":"JavaScript","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/js"},{"title":"Node.js \u0026 Electron Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/nodejs"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/javascript-nodejs"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Node.js V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/node-js-v4"},{"title":"Node.js Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/node-js-dql"}]},{"title":"JavaScript","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/js/Ditto/5.2.0/api-reference/","href":"/sdk/latest/api-reference/js"}]},{"group":"Java Server","icon":{"style":"brands","name":"java"},"pages":[{"title":"Java Server Quickstart","sidebarTitle":"Quickstart (Server)","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/java-server"},{"title":"Java for Servers \u0026 Desktop","sidebarTitle":"Install Guide (Server)","icon":"download","iconType":"solid","href":"/sdk/latest/install-guides/java/server"},{"title":"Java Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/java"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/java"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Java V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/java-v4"},{"title":"Java Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/java-dql"}]},{"title":"Java Server","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"http://software.ditto.live/java/ditto-java/5.2.0/api-reference/","href":"/sdk/latest/api-reference/java"}]},{"group":"C# - .NET","icon":{"style":"brands","name":"microsoft"},"pages":[{"title":".NET (C#) Console App Quickstart","sidebarTitle":"Quickstart (Console)","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/dotnet-console"},{"title":".NET (C#) MAUI Quickstart","sidebarTitle":"Quickstart (Maui)","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/dotnet-maui"},{"title":"C#","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/c-sharp"},{"title":"C# Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/c-sharp"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/c-sharp"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"C# V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/c-sharp-v4"},{"title":"C# Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/c-sharp-dql"}]},{"title":"C#","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/dotnet/Ditto/5.2.0/api-reference/","href":"/sdk/latest/api-reference/c-sharp"}]},{"group":"C++","icon":{"style":"solid","name":"code"},"pages":[{"title":"C++ Console App Quickstart","sidebarTitle":"Quickstart (Console)","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/cpp-console"},{"title":"C++","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/cpp"},{"title":"C++ Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/cpp"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/cpp"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"C++ V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/cpp-v4"},{"title":"C++ Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/cpp-dql"}]},{"title":"C++","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/cpp/Ditto/5.2.0/api-reference/","href":"/sdk/latest/api-reference/cpp"}]},{"group":"Rust","icon":{"style":"brands","name":"rust"},"pages":[{"title":"Rust Console App Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/rust-console"},{"title":"Rust","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/rust"},{"title":"Rust Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/rust"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/rust"},{"group":"Migration Guides","icon":{"style":"solid","name":"arrow-up-big-small"},"pages":[{"title":"Rust V4→V5 API Migration Guide","sidebarTitle":"V4→V5 Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/rust-v4"},{"title":"Rust Legacy→DQL Migration Guide","sidebarTitle":"DQL Migration Guide","icon":"arrow-up-big-small","iconType":"solid","href":"/sdk/latest/migration-guides/rust-dql"}]},{"title":"Rust","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/rust/Ditto/5.2.0/x86_64-unknown-linux-gnu/docs/dittolive_ditto/index.html","href":"/sdk/latest/api-reference/rust"}]},{"group":"Python (Preview)","icon":{"style":"brands","name":"python"},"pages":[{"title":"Python Console App Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/python"},{"title":"Python - Public Preview","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/python"},{"title":"Python Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/python"},{"title":"Python","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/python/dittolive-ditto/5.2.0.dev0/api-reference/ditto.html","href":"/sdk/latest/api-reference/python"}]},{"group":"Go (Preview)","icon":{"style":"brands","name":"golang"},"pages":[{"title":"Go Console App Quickstart","sidebarTitle":"Quickstart","icon":"rabbit-running","iconType":"solid","href":"/sdk/latest/quickstarts/go"},{"title":"Go - Public Preview","sidebarTitle":"Install Guide","icon":"book","iconType":"solid","href":"/sdk/latest/install-guides/go"},{"title":"Go Compatibility","sidebarTitle":"Compatibility","icon":"puzzle","iconType":"solid","href":"/sdk/latest/compatibility/go"},{"title":"Release Notes","sidebarTitle":"Release Notes","icon":"clipboard-list","iconType":"solid","mode":"wide","href":"/sdk/latest/release-notes-hub/go"},{"title":"Go","sidebarTitle":"API Docs","icon":"code","iconType":"solid","url":"https://software.ditto.live/go/Ditto/5.0.0-go-preview.3/docs/github.com/getditto/ditto-go-sdk/v5/ditto/index.html","href":"/sdk/latest/api-reference/go"}]}]},{"group":"Accessing Data","pages":[{"title":"Creating Documents","icon":"file-plus","href":"/sdk/latest/crud/create"},{"title":"Reading Documents","icon":"book-open-reader","href":"/sdk/latest/crud/read"},{"title":"Updating Documents","icon":"pen-to-square","href":"/sdk/latest/crud/update"},{"title":"Removing Documents","icon":"trash-can","href":"/sdk/latest/crud/delete"},{"title":"Reacting to Data Changes","icon":"eye","href":"/sdk/latest/crud/observing-data-changes"},{"title":"Large Binary Files","icon":"link","href":"/sdk/latest/crud/working-with-attachments"},{"title":"Working with EJSON","icon":"brackets-curly","iconType":"solid","href":"/sdk/latest/crud/working-with-ejson"},{"title":"Transactions","icon":"database","href":"/sdk/latest/crud/transactions"}]},{"group":"Syncing Data","icon":{"style":"solid","name":"rotate"},"pages":[{"title":"Managing Subscriptions","icon":"rotate","href":"/sdk/latest/sync/syncing-data"},{"title":"Sync Handling","icon":"rotate","iconType":"solid","href":"/best-practices/sync-handling"},{"group":"Monitoring Sync Status","icon":{"name":"file-check"},"pages":[{"title":"Tracking Local Commits","icon":"code-commit","href":"/sdk/latest/sync/tracking-local-commits"},{"title":"Tracking Cloud Sync Status","sidebarTitle":"Tracking Cloud Sync","icon":"cloud-check","href":"/sdk/latest/sync/cloud-sync-status"},{"title":"System Sync Collection Reference","sidebarTitle":"System Sync Collection","icon":"folder-gear","href":"/sdk/latest/sync/monitoring-sync-status"}]},{"title":"Configuring Collection Sync","sidebarTitle":"Configuring Collection Sync","icon":"telescope","href":"/sdk/latest/sync/sync-scopes"},{"title":"Device Storage Management","icon":"database","href":"/sdk/latest/sync/device-storage-management"},{"title":"Encryption at Rest","icon":"lock","href":"/sdk/latest/sync/encryption-at-rest"},{"title":"Data Streams","icon":"arrow-right-arrow-left","tag":"Preview","href":"/sdk/latest/sync/data-streams"}]},{"group":"Authentication and Authorization","pages":[{"title":"Authentication Providers","icon":"cloud","href":"/sdk/latest/auth-and-authorization/cloud-authentication"},{"title":"Authorizing Users","icon":"users","href":"/sdk/latest/auth-and-authorization/data-authorization"},{"title":"Certificate-Based Security","icon":"certificate","iconType":"solid","href":"/sdk/latest/auth-and-authorization/certificate-based-security"}]},{"group":"Managing the Mesh","pages":[{"title":"Using Mesh Presence","icon":"circle-nodes","href":"/sdk/latest/sync/using-mesh-presence"},{"title":"Customizing Transports","icon":"wrench","href":"/sdk/latest/sync/customizing-transport-configurations"},{"title":"Limiting Connections","icon":"scissors","href":"/sdk/latest/sync/handling-connection-requests"}]},{"group":"Deploying your App","pages":[{"group":"Configuring Hardware","icon":{"name":"network-wired"},"pages":[{"title":"Redundant Bluetooth","icon":"bluetooth","href":"/sdk/latest/sync/managing-redundant-bluetooth-le-connections"},{"title":"Bluetooth on Linux","icon":"linux","href":"/sdk/latest/deployment/bluetooth-on-linux"},{"title":"Local Area Network","icon":"wifi","href":"/sdk/latest/deployment/network-deployment"},{"title":"Optimizing Ditto Wi-Fi Aware for Your Android Hardware","sidebarTitle":"Android Wi-Fi Chipset Considerations","icon":"wifi","href":"/sdk/latest/deployment/wifi-aware-chipset-considerations"}]},{"title":"Testing","icon":"vial","href":"/sdk/latest/deployment/testing"},{"title":"Developer Tools","icon":"code","href":"/sdk/latest/deployment/integrate-ditto-tools-for-kotlin-swift-and-c-net-in-15-minutes"},{"title":"Remote Observability","icon":"eye","href":"/sdk/latest/deployment/device-observability-and-ditto-logs"},{"title":"Getting System Information","icon":"circle-info","href":"/sdk/latest/deployment/getting-system-information"},{"title":"Capturing Support Bundles","icon":"box-archive","href":"/sdk/latest/deployment/support-bundles"},{"title":"SDK Logging","icon":"file-invoice","href":"/sdk/latest/deployment/logging"},{"title":"Optimizing Server Performance","icon":"server","href":"/sdk/latest/deployment/setting-routing-hints"},{"title":"Troubleshooting Guide","icon":"wrench","iconType":"solid","href":"/sdk/latest/deployment/troubleshooting"}]}]},{"version":"v4","groups":[{"group":"Overview \u0026 Setup","pages":[{"title":"SDK v4 Homepage","sidebarTitle":"SDK Home","icon":"house","iconType":"solid","mode":"wide","href":"/sdk/v4/home"},{"title":"Migration Guide for Atlas Device Sync","icon":"arrow-right-arrow-left","iconType":"solid","href":"/sdk/v4/quickstarts/mongodb-migrationguide"},{"group":"Quickstarts","icon":{"style":"solid","name":"rabbit-running"},"pages":[{"title":"Quickstart Task Apps - Overview","sidebarTitle":"Overview","icon":"rabbit","iconType":"solid","mode":"wide","href":"/sdk/v4/quickstarts/quickstarts-landing"},{"title":"Swift Quickstart","sidebarTitle":"Swift","icon":"swift","iconType":"solid","href":"/sdk/v4/quickstarts/swift"},{"title":"Kotlin for Android Quickstart","sidebarTitle":"Kotlin","icon":"android","iconType":"solid","href":"/sdk/v4/quickstarts/kotlin-android"},{"title":"Flutter Quickstart","sidebarTitle":"Flutter","icon":"flutter","iconType":"solid","href":"/sdk/v4/quickstarts/flutter"},{"title":"React Native Quickstart","sidebarTitle":"React Native","icon":"react","iconType":"solid","href":"/sdk/v4/quickstarts/react-native"},{"title":"JavaScript Console App Quickstart","sidebarTitle":"JavaScript Console","icon":"js","iconType":"solid","href":"/sdk/v4/quickstarts/javascript-console"},{"title":"JavaScript Web Quickstart","sidebarTitle":"JavaScript Web","icon":"js","iconType":"solid","href":"/sdk/v4/quickstarts/javascript-web"},{"title":".NET (C#) MAUI Quickstart","sidebarTitle":".NET (C#) MAUI","icon":"code","iconType":"solid","href":"/sdk/v4/quickstarts/dotnet-maui"},{"title":".NET (C#) Console App Quickstart","sidebarTitle":".NET (C#) Console App","icon":"code","iconType":"solid","href":"/sdk/v4/quickstarts/dotnet-console"},{"title":"C++ Console App Quickstart","sidebarTitle":"Quickstart (Console)","icon":"rabbit-running","iconType":"solid","href":"/sdk/v4/quickstarts/cpp-console"},{"title":"Java for Android Quickstart","sidebarTitle":"Java Android","icon":"android","iconType":"solid","href":"/sdk/v4/quickstarts/java-android"},{"title":"Java Server Quickstart","sidebarTitle":"Java Server","icon":"java","iconType":"solid","href":"/sdk/v4/quickstarts/java-server"},{"title":"Rust Console App Quickstart","sidebarTitle":"Rust Console App","icon":"rust","iconType":"solid","href":"/sdk/v4/quickstarts/rust-console"},{"title":"Go Console App Quickstart","sidebarTitle":"Go","icon":"golang","iconType":"solid","href":"/sdk/v4/quickstarts/go"}]},{"group":"Install Guides","icon":{"style":"solid","name":"laptop-code"},"pages":[{"title":"SDK Install Guides","sidebarTitle":"Overview","icon":"book","iconType":"solid","href":"/sdk/v4/install-guides/install-guides"},{"title":"Swift","icon":"swift","iconType":"solid","href":"/sdk/v4/install-guides/swift"},{"title":"JavaScript","icon":"js","iconType":"solid","href":"/sdk/v4/install-guides/js"},{"title":"React Native","icon":"react","iconType":"solid","href":"/sdk/v4/install-guides/react-native"},{"title":"C#","icon":"code","iconType":"solid","href":"/sdk/v4/install-guides/c-sharp"},{"title":"C++","icon":"code","iconType":"solid","href":"/sdk/v4/install-guides/cpp"},{"title":"Rust","icon":"rust","iconType":"solid","href":"/sdk/v4/install-guides/rust"},{"title":"Flutter Install Guide","sidebarTitle":"Flutter","icon":"flutter","iconType":"solid","href":"/sdk/v4/install-guides/flutter"},{"group":"Kotlin","icon":{"style":"solid","name":"android"},"pages":[{"title":"Kotlin Install Guide","description":"You can integrate the Ditto SDK into Kotlin projects to develop native apps for the Android platform.","href":"/sdk/v4/install-guides/kotlin"},{"title":"Optimizing Bundle Sizes for Android","href":"/best-practices/optimizing-bundle-sizes-for-android"}]},{"group":"Java","icon":{"style":"solid","name":"java"},"pages":[{"title":"Java for Servers \u0026 Desktop","sidebarTitle":"Java Server","description":"Integrate the Ditto SDK into Java Server \u0026 Desktop projects","href":"/sdk/v4/install-guides/java/server"},{"title":"Java Android","href":"/sdk/v4/install-guides/java/android"}]},{"title":"Go - Public Preview","sidebarTitle":"Go","icon":"golang","iconType":"solid","href":"/sdk/v4/install-guides/go"}]}]},{"group":"Accessing Data","pages":[{"title":"Creating Documents","icon":"file-plus","href":"/sdk/v4/crud/create"},{"title":"Reading Documents","icon":"book-open-reader","href":"/sdk/v4/crud/read"},{"title":"Updating Documents","icon":"pen-to-square","href":"/sdk/v4/crud/update"},{"title":"Removing Documents","icon":"trash-can","href":"/sdk/v4/crud/delete"},{"title":"Reacting to Data Changes","icon":"eye","href":"/sdk/v4/crud/observing-data-changes"},{"title":"Large Binary Files","icon":"link","href":"/sdk/v4/crud/working-with-attachments"},{"title":"Working with EJSON","icon":"brackets-curly","iconType":"solid","href":"/sdk/v4/crud/working-with-ejson"},{"title":"Transactions","icon":"database","href":"/sdk/v4/crud/transactions"}]},{"group":"Syncing Data","icon":{"style":"solid","name":"rotate"},"pages":[{"title":"Managing Subscriptions","icon":"rotate","href":"/sdk/v4/sync/syncing-data"},{"title":"Sync Handling","icon":"rotate","iconType":"solid","href":"/best-practices/sync-handling"},{"group":"Monitoring Sync Status","icon":{"name":"file-check"},"pages":[{"title":"Tracking Local Commits","icon":"code-commit","href":"/sdk/v4/sync/tracking-local-commits"},{"title":"Tracking Cloud Sync Status","sidebarTitle":"Tracking Cloud Sync","icon":"cloud-check","href":"/sdk/v4/sync/cloud-sync-status"},{"title":"System Sync Collection Reference","sidebarTitle":"System Sync Collection","icon":"folder-gear","href":"/sdk/v4/sync/monitoring-sync-status"}]},{"title":"Configuring Collection Sync","sidebarTitle":"Configuring Collection Sync","icon":"telescope","href":"/sdk/v4/sync/sync-scopes"},{"title":"Device Storage Management","icon":"database","href":"/sdk/v4/sync/device-storage-management"}]},{"group":"Authentication and Authorization","pages":[{"title":"Online Authentication","icon":"cloud","href":"/sdk/v4/auth-and-authorization/cloud-authentication"},{"title":"Authorizing Users","icon":"users","href":"/sdk/v4/auth-and-authorization/data-authorization"},{"title":"Certificate-Based Security","icon":"certificate","iconType":"solid","href":"/sdk/v4/auth-and-authorization/certificate-based-security"}]},{"group":"Managing the Mesh","pages":[{"title":"Using Mesh Presence","icon":"circle-nodes","href":"/sdk/v4/sync/using-mesh-presence"},{"title":"Customizing Transports","icon":"wrench","href":"/sdk/v4/sync/customizing-transport-configurations"},{"title":"Limiting Connections","icon":"scissors","href":"/sdk/v4/sync/handling-connection-requests"}]},{"group":"Deploying your App","pages":[{"group":"Configuring Hardware","icon":{"name":"network-wired"},"pages":[{"title":"Redundant Bluetooth","icon":"bluetooth","href":"/sdk/v4/sync/managing-redundant-bluetooth-le-connections"},{"title":"Bluetooth on Linux","icon":"linux","href":"/sdk/v4/deployment/bluetooth-on-linux"},{"title":"Local Area Network","icon":"wifi","href":"/sdk/v4/deployment/network-deployment"},{"title":"Optimizing Ditto Wi-Fi Aware for Your Android Hardware","sidebarTitle":"Android Wi-Fi Chipset Considerations","icon":"wifi","href":"/sdk/v4/deployment/wifi-aware-chipset-considerations"}]},{"title":"Testing","icon":"vial","href":"/sdk/v4/deployment/testing"},{"title":"Developer Tools","icon":"code","href":"/sdk/v4/deployment/integrate-ditto-tools-for-kotlin-swift-and-c-net-in-15-minutes"},{"title":"Remote Observability","icon":"eye","href":"/sdk/v4/deployment/device-observability-and-ditto-logs"},{"title":"Getting System Information","icon":"circle-info","href":"/sdk/v4/deployment/getting-system-information"},{"title":"SDK Logging","icon":"file-invoice","href":"/sdk/v4/deployment/logging"},{"title":"Optimizing Server Performance","icon":"server","href":"/sdk/v4/deployment/setting-routing-hints"},{"title":"Troubleshooting Guide","icon":"wrench","iconType":"solid","href":"/sdk/v4/deployment/troubleshooting"}]},{"group":"Reference","pages":[{"group":"API Reference","icon":{"style":"solid","name":"square-code"},"pages":[{"title":"Directory of API References","sidebarTitle":"Directory","mode":"wide","icon":"book","iconType":"solid","href":"/sdk/v4/api-reference/api-reference"},{"title":"Swift","icon":"swift","iconType":"solid","url":"https://software.ditto.live/cocoa/DittoSwift/4.14.7/api-reference/","href":"/sdk/v4/api-reference/swift"},{"title":"JavaScript","icon":"js","iconType":"solid","url":"https://software.ditto.live/js/Ditto/4.14.7/api-reference/","href":"/sdk/v4/api-reference/js"},{"title":"Android","icon":"code","iconType":"solid","url":"https://software.ditto.live/android/Ditto/4.14.7/api-reference/","href":"/sdk/v4/api-reference/kotlin"},{"title":"C#","icon":"code","iconType":"solid","url":"https://software.ditto.live/dotnet/Ditto/4.14.7/api-reference/","href":"/sdk/v4/api-reference/c-sharp"},{"title":"C++","icon":"code","iconType":"solid","url":"https://software.ditto.live/cpp/Ditto/4.14.7/api-reference/","href":"/sdk/v4/api-reference/cpp"},{"title":"Rust","icon":"rust","iconType":"solid","url":"https://software.ditto.live/rust/Ditto/4.14.7/x86_64-unknown-linux-gnu/docs/dittolive_ditto/index.html","href":"/sdk/v4/api-reference/rust"},{"title":"Flutter","icon":"flutter","iconType":"solid","url":"https://pub.dev/documentation/ditto_live/4.14.7/ditto_live/","href":"/sdk/v4/api-reference/flutter"},{"title":"Go","icon":"golang","iconType":"solid","url":"https://software.ditto.live/go/Ditto/5.0.0-go-preview.3/docs/github.com/getditto/ditto-go-sdk/v5/ditto/index.html","href":"/sdk/v4/api-reference/go"}]},{"group":"Release Notes","icon":{"style":"solid","name":"clipboard-list"},"pages":[{"title":"Directory of Release Notes","sidebarTitle":"Directory","mode":"wide","icon":"book","iconType":"solid","href":"/sdk/v4/release-notes/release-notes"},{"title":"Swift Release Notes","sidebarTitle":"Swift","icon":"swift","iconType":"solid","href":"/sdk/v4/release-notes/swift"},{"title":"Kotlin Release Notes","sidebarTitle":"Kotlin","icon":"code","iconType":"solid","href":"/sdk/v4/release-notes/kotlin"},{"title":"JavaScript | Web and Node.js | React Native","icon":"js","iconType":"solid","href":"/sdk/v4/release-notes/js"},{"title":"Java Release Notes","sidebarTitle":"Java","icon":"java","iconType":"solid","href":"/sdk/v4/release-notes/java"},{"title":"C# Release Notes","sidebarTitle":"C#","icon":"code","iconType":"solid","href":"/sdk/v4/release-notes/c-sharp"},{"title":"C++ Release Notes","sidebarTitle":"C++","icon":"code","iconType":"solid","href":"/sdk/v4/release-notes/cpp"},{"title":"Rust Release Notes","sidebarTitle":"Rust","icon":"rust","iconType":"solid","href":"/sdk/v4/release-notes/rust"},{"title":"Flutter Release Notes","sidebarTitle":"Flutter","icon":"flutter","iconType":"solid","href":"/sdk/v4/release-notes/flutter"},{"title":"Go Release Notes","sidebarTitle":"Go","icon":"golang","iconType":"solid","href":"/sdk/v4/release-notes/go"},{"title":"SDK Versioning Lifecycle","sidebarTitle":"SDK Versioning Lifecycle","icon":"hashtag","iconType":"solid","href":"/sdk/v4/release-notes/versioning"}]},{"group":"Compatibility","icon":{"style":"solid","name":"badge-check"},"pages":[{"title":"Directory of Compatibility Maps","sidebarTitle":"Directory","icon":"book","iconType":"solid","mode":"wide","href":"/sdk/v4/compatibility/compatibility"},{"title":"Swift Compatibility","sidebarTitle":"Swift","icon":"swift","iconType":"solid","href":"/sdk/v4/compatibility/swift"},{"title":"Kotlin Compatibility","sidebarTitle":"Kotlin","icon":"code","iconType":"solid","href":"/sdk/v4/compatibility/kotlin"},{"title":"JavaScript Web Compatibility","sidebarTitle":"JavaScript Web","icon":"js","iconType":"solid","href":"/sdk/v4/compatibility/js-web"},{"title":"Node.js \u0026 Electron Compatibility","sidebarTitle":"JavaScript Node.js","icon":"node","iconType":"solid","href":"/sdk/v4/compatibility/nodejs"},{"title":"React Native Compatibility","sidebarTitle":"React Native","icon":"react","iconType":"solid","href":"/sdk/v4/compatibility/react-native"},{"title":"Java Compatibility","sidebarTitle":"Java","icon":"java","iconType":"solid","href":"/sdk/v4/compatibility/java"},{"title":"C# Compatibility","sidebarTitle":"C#","icon":"code","iconType":"solid","href":"/sdk/v4/compatibility/c-sharp"},{"title":"C++ Compatibility","sidebarTitle":"C++","icon":"code","iconType":"solid","href":"/sdk/v4/compatibility/cpp"},{"title":"Rust Compatibility","sidebarTitle":"Rust","icon":"rust","iconType":"solid","href":"/sdk/v4/compatibility/rust"},{"title":"Flutter Compatibility","sidebarTitle":"Flutter","icon":"flutter","iconType":"solid","href":"/sdk/v4/compatibility/flutter"},{"title":"Go Compatibility","sidebarTitle":"Go","icon":"golang","iconType":"solid","href":"/sdk/v4/compatibility/go"}]}]},{"group":"Preview Features","pages":[{"title":"DittoConfig","icon":"flask","href":"/sdk/v4/ditto-config"}]}]}]},{"tab":"Query Language (DQL)","icon":{"style":"regular","name":"file-magnifying-glass"},"pages":[{"title":"Query Language (DQL)","href":"/dql/dql"}]},{"tab":"Cloud Platform","icon":{"style":"regular","name":"cloud"},"pages":[{"title":"Cloud Platform","href":"/cloud/overview"}]},{"tab":"Ditto Server","hidden":true,"pages":[{"title":"Ditto Server","href":"/ditto-server/operator/operator-quickstart"}]},{"tab":"Ditto Edge Server","hidden":true,"pages":[{"title":"Ditto Edge Server","href":"/edge-server/overview"}]}]},"basePath":"","title":"Optimizing Bundle Sizes for Android - Ditto","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["10e4515597"],"chunks":["BannerMarkdown-CX_qQQOL.js","dist-BTZUMDnx.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-xpJZXxdP.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}