You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native Vector Icons在Expo打包安卓APK后真机不显示问题

Hey there, I’ve dealt with this exact frustration before—everything works smooth in the simulator, but the icons vanish once you build the APK and install it on a real Android device. Let’s go through the fixes that got my icons showing up again:

1. Switch to Expo’s official vector icon package

The vanilla react-native-vector-icons can play poorly with managed Expo builds. Instead, use @expo/vector-icons—it’s built specifically to work seamlessly with Expo projects.

  • Uninstall the old package first:
    npm uninstall react-native-vector-icons
    # Or yarn remove react-native-vector-icons
    
  • Install the Expo-compatible version:
    npm install @expo/vector-icons
    # Or yarn add @expo/vector-icons
    
  • Update all your imports to use the new package:
    // Replace this:
    // import Icon from 'react-native-vector-icons/Ionicons';
    import Ionicons from '@expo/vector-icons/Ionicons';
    
2. Double-check your font bundling config

Expo needs explicit instructions to bundle icon fonts into your build. Open your app.json or app.config.js and verify you have the font plugin setup:

{
  "expo": {
    "plugins": [
      [
        "expo-font",
        {
          "fonts": [
            "@expo/vector-icons/build/vendor/Ionicons.ttf",
            "@expo/vector-icons/build/vendor/FontAwesome.ttf",
            // Add any other icon font families you're using here
          ]
        }
      ]
    ]
  }
}

Note: Newer Expo versions might handle this automatically for @expo/vector-icons, but it never hurts to confirm.

3. Wipe caches and do a fresh build

Cached assets are the #1 culprit for this kind of issue. Let’s start clean:

  • Clear Expo’s local cache:
    expo r -c
    
  • If you’re using a bare workflow, clean the Android Gradle cache too:
    cd android && ./gradlew clean && cd ..
    
  • Rebuild your APK from scratch:
    expo build:android -t apk
    
4. Avoid dynamic icon names (a common gotcha!)

If you’re using variables for icon names (like name={myIconState}), Expo’s bundler might not statically detect which icons to include. Try these workarounds:

  • Use static icon names where possible:
    <Ionicons name="heart" size={24} color="red" />
    
  • If you need dynamic icons, reference them directly from the glyph map:
    import Ionicons from '@expo/vector-icons/Ionicons';
    
    // In your component
    <Ionicons name={Ionicons.glyphMap.star} size={24} color="black" />
    
5. Test with a minimal example

If nothing else works, isolate the issue with a tiny test component. Create a screen with just an icon and build that APK:

import React from 'react';
import { View } from 'react-native';
import Ionicons from '@expo/vector-icons/Ionicons';

export default function TestIconScreen() {
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Ionicons name="rocket" size={48} color="blue" />
    </View>
  );
}

If this works, the problem is somewhere in your main app’s code or config—start narrowing down which part is causing the conflict.

One final tip: Make sure you’re on the latest versions of Expo and @expo/vector-icons—outdated packages often cause compatibility bugs. Run npm update expo @expo/vector-icons to get the latest releases.

Hope one of these fixes gets your icons back on the real device! 🚀

内容的提问来源于stack exchange,提问作者Ahmad

火山引擎 最新活动