or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

android-config.mdandroid-plugins.mdcore-plugin-system.mdindex.mdios-config.mdios-plugins.mdmod-system.mdutilities.md
tile.json

android-config.mddocs/

Android Configuration API

Comprehensive configuration utilities for Android platform development including manifest manipulation, resource management, build configuration, and native code modification. The AndroidConfig namespace provides fine-grained control over Android project files.

Manifest Configuration

AndroidConfig.Manifest

Utilities for reading, writing, and manipulating AndroidManifest.xml files.

namespace AndroidConfig.Manifest {
  function readAndroidManifestAsync(projectRoot: string): Promise<AndroidManifest>;
  function writeAndroidManifestAsync(
    projectRoot: string, 
    manifest: AndroidManifest
  ): Promise<void>;
  
  function getMainActivityOrThrow(manifest: AndroidManifest): ManifestActivity;
  function getMainActivity(manifest: AndroidManifest): ManifestActivity | null;
  
  function getMainApplicationOrThrow(manifest: AndroidManifest): ManifestApplication;
  function getMainApplication(manifest: AndroidManifest): ManifestApplication | null;
  
  function addMetaDataItemToMainApplication(
    mainApplication: ManifestApplication,
    itemName: string,
    itemValue: string,
    itemType?: 'resource' | 'value'
  ): ManifestApplication;
  
  function removeMetaDataItemFromMainApplication(
    manifest: AndroidManifest,
    itemName: string
  ): AndroidManifest;
}

Usage:

const manifest = await AndroidConfig.Manifest.readAndroidManifestAsync(projectRoot);
const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow(manifest);

// Add API key to application
AndroidConfig.Manifest.addMetaDataItemToMainApplication(
  mainApplication,
  "com.google.android.maps.v2.API_KEY",
  "your-api-key-here"
);

await AndroidConfig.Manifest.writeAndroidManifestAsync(projectRoot, manifest);

Permissions Management

AndroidConfig.Permissions

Utilities for managing Android permissions in the manifest.

namespace AndroidConfig.Permissions {
  function getPermissions(manifest: AndroidManifest): string[];
  function setPermissions(
    manifest: AndroidManifest, 
    permissions: string[]
  ): AndroidManifest;
  
  function addPermission(
    manifest: AndroidManifest, 
    permission: string
  ): AndroidManifest;
  
  function removePermissions(
    manifest: AndroidManifest, 
    permissions: string[]
  ): AndroidManifest;
  
  function ensurePermissions(
    manifest: AndroidManifest, 
    permissions: string[]
  ): AndroidManifest;
  
  function ensurePermission(
    manifest: AndroidManifest, 
    permission: string
  ): AndroidManifest;
}

Usage:

// Add internet permission
AndroidConfig.Permissions.ensurePermission(
  manifest,
  "android.permission.INTERNET"
);

// Add multiple permissions
AndroidConfig.Permissions.ensurePermissions(manifest, [
  "android.permission.CAMERA",
  "android.permission.RECORD_AUDIO",
  "android.permission.WRITE_EXTERNAL_STORAGE"
]);

Resource Management

AndroidConfig.Resources

Utilities for reading and writing XML resource files.

namespace AndroidConfig.Resources {
  function readResourcesXMLAsync(options: {
    projectRoot: string;
    path: string;
  }): Promise<ResourceXML>;
  
  function writeResourcesXMLAsync(options: {
    projectRoot: string;
    path: string;
    xml: ResourceXML;
  }): Promise<void>;
}

AndroidConfig.Strings

Utilities for managing string resources.

namespace AndroidConfig.Strings {
  function setStringItem(
    strings: ResourceXML,
    name: string,
    value: string,
    options?: { translatable?: boolean }
  ): ResourceXML;
  
  function getStringItem(
    strings: ResourceXML,
    name: string
  ): string | null;
  
  function removeStringItem(
    strings: ResourceXML,
    name: string
  ): ResourceXML;
}

AndroidConfig.Colors

Utilities for managing color resources.

namespace AndroidConfig.Colors {
  function setColorItem(
    colors: ResourceXML,
    name: string,
    value: string
  ): ResourceXML;
  
  function getColorItem(
    colors: ResourceXML,
    name: string
  ): string | null;
  
  function removeColorItem(
    colors: ResourceXML,
    name: string
  ): ResourceXML;
}

AndroidConfig.Styles

Utilities for managing style resources.

namespace AndroidConfig.Styles {
  function getAppThemeLightNoActionBarGroup(styles: ResourceXML): StyleGroup | null;
  function setAppThemeLightNoActionBarGroup(
    styles: ResourceXML,
    styleGroup: StyleGroup
  ): ResourceXML;
  
  function setStylesItem(
    styles: ResourceXML,
    name: string,
    styleData: StyleData
  ): ResourceXML;
  
  function getStylesItem(
    styles: ResourceXML,
    name: string
  ): StyleData | null;
  
  function removeStylesItem(
    styles: ResourceXML,
    name: string
  ): ResourceXML;
}

interface StyleData {
  parent?: string;
  items: Array<{
    name: string;
    value: string;
  }>;
}

Build Configuration

AndroidConfig.Properties

Utilities for managing gradle.properties files.

namespace AndroidConfig.Properties {
  function parsePropertiesFile(contents: string): PropertiesItem[];
  function propertiesListToString(properties: PropertiesItem[]): string;
  
  function getGradlePropertiesAsync(projectRoot: string): Promise<PropertiesItem[]>;
  function setGradlePropertiesAsync(
    projectRoot: string,
    properties: PropertiesItem[]
  ): Promise<void>;
  
  interface PropertiesItem {
    key: string;
    value: string;
  }
}

Project Structure

AndroidConfig.Paths

Utilities for locating and working with Android project file paths.

namespace AndroidConfig.Paths {
  function getAndroidManifestFilePath(projectRoot: string): string;
  function getResourceFolderAsync(projectRoot: string): Promise<string>;
  function getResourceXMLPathAsync(projectRoot: string, options: {
    kind: "values" | "values-night";
    name: string;
  }): Promise<string>;
  
  function getMainActivityAsync(projectRoot: string): Promise<ApplicationProjectFile>;
  function getMainApplicationAsync(projectRoot: string): Promise<ApplicationProjectFile>;
  
  function getProjectBuildGradleFilePath(projectRoot: string): string;
  function getAppBuildGradleFilePath(projectRoot: string): string;
  function getSettingsGradleFilePath(projectRoot: string): string;
  function getGradlePropertiesFilePath(projectRoot: string): string;
  
  interface ApplicationProjectFile {
    path: string;
    contents: string;
    language: "java" | "kotlin";
  }
  
  interface GradleProjectFile {
    path: string;
    contents: string;
  }
}

App Configuration

AndroidConfig.Name

Utilities for managing app name configuration.

namespace AndroidConfig.Name {
  function setName(manifest: AndroidManifest, name: string): AndroidManifest;
  function getName(manifest: AndroidManifest): string | null;
}

AndroidConfig.Package

Utilities for managing package name and application ID.

namespace AndroidConfig.Package {
  function getPackage(manifest: AndroidManifest): string;
  function setPackage(manifest: AndroidManifest, packageName: string): AndroidManifest;
  
  function getApplicationIdAsync(projectRoot: string): Promise<string>;
  function setPackageInBuildGradle(
    buildGradle: string,
    packageName: string
  ): string;
  
  function withPackageManifest(config: ExpoConfig): ExpoConfig;
  function withPackageGradle(config: ExpoConfig): ExpoConfig;
}

AndroidConfig.Version

Utilities for managing app version configuration.

namespace AndroidConfig.Version {
  function getVersionCode(manifest: AndroidManifest): number | null;
  function setVersionCode(manifest: AndroidManifest, versionCode: number): AndroidManifest;
  
  function getVersionName(manifest: AndroidManifest): string | null;
  function setVersionName(manifest: AndroidManifest, versionName: string): AndroidManifest;
}

UI Configuration

AndroidConfig.Orientation

Utilities for managing screen orientation settings.

namespace AndroidConfig.Orientation {
  function getOrientation(manifest: AndroidManifest): string | null;
  function setOrientation(
    manifest: AndroidManifest,
    orientation: "portrait" | "landscape" | "sensor" | "unspecified"
  ): AndroidManifest;
}

AndroidConfig.StatusBar

Utilities for managing status bar configuration.

namespace AndroidConfig.StatusBar {
  function getStatusBarColor(styles: ResourceXML): string | null;
  function setStatusBarColor(styles: ResourceXML, color: string): ResourceXML;
  
  function getStatusBarBackgroundColor(colors: ResourceXML): string | null;
  function setStatusBarBackgroundColor(colors: ResourceXML, color: string): ResourceXML;
  
  function setStatusBarTranslucent(styles: ResourceXML, translucent: boolean): ResourceXML;
}

AndroidConfig.PrimaryColor

Utilities for managing primary color theme.

namespace AndroidConfig.PrimaryColor {
  function setPrimaryColor(colors: ResourceXML, color: string): ResourceXML;
  function getPrimaryColor(colors: ResourceXML): string | null;
}

Code Modification

AndroidConfig.CodeMod

Utilities for modifying Java and Kotlin source files.

namespace AndroidConfig.CodeMod {
  function addImports(contents: string, imports: string[]): string;
  
  function appendContentsInsideDeclarationBlock(
    contents: string,
    declaration: string,
    newContents: string
  ): string;
  
  function insertContentsInsideDeclarationBlock(
    contents: string,
    declaration: string,
    newContents: string
  ): string;
  
  function findCodeBlock(
    contents: string,
    declaration: string
  ): { start: number; end: number } | null;
}

Usage:

// Add imports to MainActivity
let mainActivityContents = await fs.readFile(mainActivityPath, "utf8");

mainActivityContents = AndroidConfig.CodeMod.addImports(
  mainActivityContents,
  [
    "import com.example.CustomModule;",
    "import android.util.Log;"
  ]
);

// Add code to onCreate method
mainActivityContents = AndroidConfig.CodeMod.appendContentsInsideDeclarationBlock(
  mainActivityContents,
  "protected void onCreate(Bundle savedInstanceState)",
  "        CustomModule.initialize(this);"
);

Usage Examples

Complete App Configuration

import { AndroidConfig } from "@expo/config-plugins";

async function configureAndroidApp(projectRoot: string, config: {
  appName: string;
  packageName: string;
  versionName: string;
  versionCode: number;
  primaryColor: string;
  permissions: string[];
}) {
  // Read manifest
  const manifest = await AndroidConfig.Manifest.readAndroidManifestAsync(projectRoot);
  
  // Set basic app info
  AndroidConfig.Name.setName(manifest, config.appName);
  AndroidConfig.Package.setPackage(manifest, config.packageName);
  AndroidConfig.Version.setVersionName(manifest, config.versionName);
  AndroidConfig.Version.setVersionCode(manifest, config.versionCode);
  
  // Set permissions
  AndroidConfig.Permissions.setPermissions(manifest, config.permissions);
  
  // Write manifest back
  await AndroidConfig.Manifest.writeAndroidManifestAsync(projectRoot, manifest);
  
  // Update strings.xml
  const stringsPath = await AndroidConfig.Paths.getResourceXMLPathAsync(projectRoot, {
    kind: "values",
    name: "strings"
  });
  const strings = await AndroidConfig.Resources.readResourcesXMLAsync({
    projectRoot,
    path: stringsPath
  });
  
  AndroidConfig.Strings.setStringItem(strings, "app_name", config.appName);
  
  await AndroidConfig.Resources.writeResourcesXMLAsync({
    projectRoot,
    path: stringsPath,
    xml: strings
  });
  
  // Update colors.xml
  const colorsPath = await AndroidConfig.Paths.getResourceXMLPathAsync(projectRoot, {
    kind: "values",
    name: "colors"
  });
  const colors = await AndroidConfig.Resources.readResourcesXMLAsync({
    projectRoot,
    path: colorsPath
  });
  
  AndroidConfig.Colors.setColorItem(colors, "colorPrimary", config.primaryColor);
  
  await AndroidConfig.Resources.writeResourcesXMLAsync({
    projectRoot,
    path: colorsPath,
    xml: colors
  });
}