You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Expo构建的React Native安卓应用内打开/安装外部APK文件

Expo Managed Flow 安卓应用内部安装APK解决方案

1. 安装必要依赖

首先安装两个官方Expo库,用于文件访问和意图跳转:

npx expo install expo-file-system expo-intent-launcher

2. 配置安卓权限与规则

在项目根目录的app.json或app.config.js中添加安卓相关配置:

{
  "expo": {
    "android": {
      // 申请安装未知应用权限
      "permissions": ["REQUEST_INSTALL_PACKAGES"],
      // 配置APK文件访问意图
      "intentFilters": [
        {
          "action": "VIEW",
          "data": [
            {
              "mimeType": "application/vnd.android.package-archive",
              "scheme": "content"
            }
          ],
          "category": ["DEFAULT", "BROWSABLE"]
        }
      ]
    }
  }
}

3. 正确实现代码

你的原有代码缺少FLAG_ACTIVITY_NEW_TASK标记,且没有做文件存在性校验,以下是可直接使用的实现:

import * as FileSystem from 'expo-file-system';
import * as IntentLauncher from 'expo-intent-launcher';

// 入参为已下载到本地的APK文件路径
const installDownloadedApk = async (apkFileUri) => {
  try {
    // 校验APK文件是否存在
    const fileStat = await FileSystem.getInfoAsync(apkFileUri);
    if (!fileStat.exists) {
      throw new Error("目标APK文件不存在,请检查下载逻辑");
    }

    // 将文件路径转换为系统可识别的Content URI
    const contentUri = await FileSystem.getContentUriAsync(apkFileUri);

    // 启动系统安装程序
    await IntentLauncher.startActivityAsync(
      "android.intent.action.VIEW",
      {
        data: contentUri,
        // 同时授予读取权限+新任务启动标记
        flags: 1 | 268435456,
        type: "application/vnd.android.package-archive"
      }
    );
  } catch (error) {
    console.error("安装APK失败:", error);
  }
}

注:flags参数中1对应FLAG_GRANT_READ_URI_PERMISSION,268435456对应FLAG_ACTIVITY_NEW_TASK,两个标记必须同时配置才能正常唤起安装界面

4. 注意事项

  • 不要使用Linking.openURL直接打开APK,该API无法访问应用私有目录下的文件,也无法正确唤起安装程序
  • 测试时不要使用Expo Go客户端,该功能需要自定义开发客户端/预览版APK/正式打包后才能生效
  • 安卓8及以上系统首次调用安装逻辑时,会自动跳转到权限申请页,引导用户开启「允许安装未知应用」权限,无需额外开发权限申请逻辑
  • 下载的APK文件必须存储在Expo应用可访问的目录下,推荐使用FileSystem.documentDirectory或FileSystem.cacheDirectory作为下载存储路径

内容的提问来源于stack exchange,提问作者Md Zahid Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:02