询问位置权限时,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 权限