← Back to facebook/fresco

How to Deploy & Use facebook/fresco

Fresco Deployment and Usage Guide

Prerequisites

  • Android Studio (latest stable version recommended)
  • Android SDK with API level 9 (Gingerbread) or higher
  • Java Development Kit (JDK) 8 or higher
  • Gradle 5.0 or higher (typically bundled with Android Studio)
  • Android device or emulator running Android 2.3 (Gingerbread) or later for testing

Installation

1. Add Fresco to Your Project

If you're building with Gradle, add the following line to the dependencies section of your build.gradle file:

dependencies {
    implementation 'com.facebook.fresco:fresco:3.6.0'
}

2. Initialize Fresco in Your Application

Add the following code to your Application class's onCreate() method:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

Don't forget to declare your Application class in your AndroidManifest.xml:

<application
    android:name=".MyApplication"
    ...>
    ...
</application>

Configuration

Memory Cache Configuration

Fresco automatically configures memory cache settings based on available device memory. However, you can customize these settings by creating a ImagePipelineConfig:

ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
    .setBitmapMemoryCacheParamsSupplier(new BitmapMemoryCacheParamsSupplier())
    .build();
Fresco.initialize(context, config);

Image Pipeline Configuration

For advanced configuration options, you can customize the image pipeline:

ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
    .setDownsampleEnabled(true)
    .setResizeAndRotateEnabledForNetwork(true)
    .setWebpSupportEnabled(true)
    .build();
Fresco.initialize(context, config);

Build & Run

Building Your Project

  1. Open your project in Android Studio
  2. Sync Gradle files by clicking the "Sync Project with Gradle Files" button or running ./gradlew build in your terminal
  3. Build the project by selecting "Build" → "Make Project" or running ./gradlew assembleDebug

Running Locally

  1. Connect a device or start an emulator
  2. Select your run configuration from the toolbar dropdown
  3. Click the Run button (green triangle) or press Shift+F10
  4. Monitor the Logcat for any initialization messages from Fresco

Production Build

For release builds, use:

./gradlew assembleRelease

This will create an optimized APK in the app/build/outputs/apk/release/ directory.

Deployment

Google Play Store

  1. Generate a signed APK using Android Studio's Build → Generate Signed Bundle/APK
  2. Upload to Google Play Console following Google's standard app submission process
  3. Test on multiple devices using the internal testing track before full release

Alternative Distribution

  • Amazon Appstore: Follow Amazon's submission guidelines
  • Direct APK distribution: Host the APK on your website or use services like APKPure
  • Enterprise distribution: Use Android Enterprise features for internal app distribution

Performance Considerations

  • Enable ProGuard/R8 to shrink and optimize your APK
  • Consider using Android App Bundles for more efficient delivery
  • Test on low-end devices to ensure Fresco performs well across the device spectrum

Troubleshooting

Common Issues and Solutions

1. OutOfMemoryError Crashes

Problem: Your app crashes with OutOfMemoryError when loading large images.

Solution:

  • Enable downsampling in your pipeline config:
ImagePipelineConfig.newBuilder(context)
    .setDownsampleEnabled(true)
    .build();
  • Use appropriate image sizes for your UI components
  • Consider using SimpleDraweeView with proper aspectRatio settings

2. Images Not Loading

Problem: Images fail to load from network or disk.

Solution:

  • Check network permissions in your AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
  • Verify your image URIs are correct and accessible
  • Check Logcat for specific error messages from Fresco

3. Slow Image Loading

Problem: Images take too long to appear.

Solution:

  • Enable progressive JPEG support:
ImagePipelineConfig.newBuilder(context)
    .setProgressiveJpegConfig(new ProgressiveJpegConfig())
    .build();
  • Use appropriate placeholder images while loading
  • Consider using lower resolution placeholders initially

4. Memory Leaks

Problem: Memory usage grows over time, especially with image-heavy content.

Solution:

  • Ensure you're using DraweeController properly and releasing resources
  • Use Fresco's built-in memory management features
  • Monitor memory usage with Android Profiler

5. Animation Issues

Problem: Animated GIFs or WebPs don't play or cause performance issues.

Solution:

  • Enable WebP support if needed:
ImagePipelineConfig.newBuilder(context)
    .setWebpSupportEnabled(true)
    .build();
  • Use appropriate animation settings for your use case
  • Consider limiting the number of concurrent animations

Debug Tools

Fresco provides several debugging tools:

  1. Fresco Viewer: A sample app demonstrating various Fresco features
  2. Flipper Plugin: Use with Facebook's Flipper for advanced debugging
  3. Logcat: Enable detailed logging by setting:
FLog.setMinimumLoggingLevel(FLog.VERBOSE);

Performance Monitoring

Monitor Fresco's performance using:

  • Android Profiler in Android Studio
  • Custom metrics through Fresco's listener interfaces
  • Third-party monitoring tools that integrate with Android

By following this guide, you should be able to successfully integrate, configure, and deploy Fresco in your Android application while handling common issues that may arise during development and production use.