询问位置权限时,React Native Expo 应用程序在 android apk 文件上崩溃

Posted

技术标签:

【中文标题】询问位置权限时,React Native Expo 应用程序在 android apk 文件上崩溃【英文标题】:React Native Expo app crashing on android apk file when ask location permission 【发布时间】:2021-09-18 15:33:40 【问题描述】:

我对 expo 独立应用程序有疑问。问题在于位置的询问权限。在开发模式下,应用程序要求位置权限并且运行良好。没有错误。使用 expo build:android 构建应用程序后,它会创建一个 android 独立应用程序。安装该 APK 并尝试访问请求位置权限的同一页面后,应用程序崩溃并重新启动。

  Expo CLI 4.7.3 environment info:
    System:
      OS: Windows 10 10.0.19042
    Binaries:
      Node: 14.15.4 - C:\Program Files\nodejs\node.EXE
      Yarn: 1.22.10 - C:\Users\ISLAMSOFT\AppData\Roaming\npm\yarn.CMD
      npm: 7.6.3 - C:\Program Files\nodejs\npm.CMD
    IDEs:
      Android Studio: Version  4.2.0.0 AI-202.7660.26.42.7486908
    npmPackages:
      expo: ~40.0.0 => 40.0.1
      react: 16.13.1 => 16.13.1
      react-dom: 16.13.1 => 16.13.1
      react-native: https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz => 0.63.2
      react-native-web: ~0.13.12 => 0.13.18
    Expo Workflow: managed

在 app.json 我添加了这个但没有解决问题

"android": 
      "permissions":[
        "ACCESS_COARSE_LOCATION",
        "ACCESS_FINE_LOCATION",
        "CAMERA",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE"
      ]
    ,

不知道怎么测试apk文件来检查错误

【问题讨论】:

【参考方案1】:

可能原因1


几天前我在我的 expo 应用程序中遇到了同样的问题。我的应用需要 AUDIO_RECORDING 权限。该应用程序在开发中运行良好,但在生产中崩溃了。

在获得useEffect 的权限之前,我发现我错过了await 关键字。像这样的:

 useEffect(() => 
    Permissions.askAsync(Permissions.AUDIO_RECORDING)
 , [])

然后我完全删除了上面的代码。然后从TouchableOpacity 按钮的onPressIn 事件中获取权限。代码是这样的:

  const startRecording = async () => 
    const  status  = await Permissions.getAsync(Permissions.AUDIO_RECORDING);
    if (status !== 'granted') return;
    
    // Other codes...
  

您应该仔细检查您是如何获得许可的。

可能原因2


有时 expo 应用程序会因为错误的 css 值而崩溃,如下所示:

flex: '1'

代替

flex: 1

这种小错误使我的应用程序崩溃了很多次。您应该检查所有的 css 属性值。

【讨论】:

感谢您的评论如何检查 apk 文件的错误,我在开发模式下找不到任何错误,并尝试在生产模式下运行应用程序,但也没有错误,仅在 apk 文件中 实际上你无法测试 apk。尝试继续更改您有疑问的代码并继续构建 apk。或者您可以运行此命令expo start --no-dev --minify 以查看是否出现任何错误。 我试过这个“expo start --no-dev --minify”没有错误,当按下这个函数的按钮时它就崩溃了 let status = await Permissions.askAsync(Permissions.LOCATION); 这现在在开发中崩溃了吗?还是在apk上? 仅适用于 apk 文件

以上是关于询问位置权限时,React Native Expo 应用程序在 android apk 文件上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

React Native 应用程序在首次启动时询问 iOS 位置权限,但 0 引用内部任何位置的地理/位置代码

使用signInWithCredential(),React Native Expo时,Firestore权限被拒绝

在 Expo/React Native 中包含 Android 权限

我们如何在 Expo SDK 42+ 中获得后台位置权限?

React Native Expo 音频 |从最新位置播放直播

如何请求后台位置权限,但在 iOS / React Native 中回退到何时使用权限?