Expo (React Native)

Configurações e plugin para uso em apps Expo

Conforme detalhado na página de Configuração, é necessário aplicar filtros de ABI, uma vez que a SDK compila exclusivamente para 32 bits (armeabi-v7a). Adicionalmente, é preciso habilitar o Legacy Packaging utilizando a configuração useLegacyPackaging.

No Expo, essas definições são aplicadas via Continuous Native Generation (CNG), que ajusta as configurações nativas após a geração das pastas correspondentes.

Para implementar essas mudanças:

  • Legacy Packaging: Utilize o plugin expo-build-properties configurando useLegacyPackaging: true.
  • Filtros de ABI: Aplique um config plugin customizado. O código necessário (em TypeScript) é apresentado abaixo:
import {
  type ConfigPlugin,
  withAppBuildGradle,
  withGradleProperties,
} from '@expo/config-plugins';

export const withArchSplits: ConfigPlugin = (config) => {
  const abiSplits = ['armeabi-v7a'];

  const buildGradleConfig = withAppBuildGradle(config, (newConfig) => {
    if (newConfig.modResults.contents.includes('splits')) {
      return newConfig;
    }

    const abiSplitsString = abiSplits.map((abi) => `"${abi}"`).join(',');

    const regex =
      /(androidResources\s*{\s*ignoreAssetsPattern\s*'!\.svn:!\.git:!\.ds_store:!\*\.scc:!CVS:!thumbs\.db:!picasa\.ini:!\*~'\s*})/;

    const replacement = `
    $1

    splits {
        abi {
            enable true
            reset()
            include ${abiSplitsString}
            universalApk false
        }
    }
    `;

    newConfig.modResults.contents = newConfig.modResults.contents.replace(
      regex,
      replacement,
    );

    return newConfig;
  });

  const gradlePropertiesConfig = withGradleProperties(config, (newConfig) => {
    const abiSplitsString = abiSplits.join(',');

    const keyIdx = newConfig.modResults.findIndex(
      (item) =>
        item.type === 'property' && item.key === 'reactNativeArchitectures',
    );

    if (keyIdx >= 0) {
      newConfig.modResults.splice(keyIdx, 1, {
        type: 'property',
        key: 'reactNativeArchitectures',
        value: abiSplitsString,
      });
    } else {
      newConfig.modResults.push({
        type: 'property',
        key: 'reactNativeArchitectures',
        value: abiSplitsString,
      });
    }

    return newConfig;
  });

  Object.assign(config, gradlePropertiesConfig, buildGradleConfig);

  return config;
};


Did this page help you?