【发布时间】:2020-02-25 17:36:51
【问题描述】:
我已经创建了一个 react-native 应用,我想访问用户的地理位置。好吧,我没有任何 Android 的文件夹,我需要在 AndroidManifest.xml 中添加一些权限。如何将其与我现有的项目联系起来?
Obs:我正在使用 expo 和 npm。
【问题讨论】:
标签: android react-native npm expo
我已经创建了一个 react-native 应用,我想访问用户的地理位置。好吧,我没有任何 Android 的文件夹,我需要在 AndroidManifest.xml 中添加一些权限。如何将其与我现有的项目联系起来?
Obs:我正在使用 expo 和 npm。
【问题讨论】:
标签: android react-native npm expo
AndroidManifest.xml 不可能用于 Expo 项目。要添加此权限,您必须使用 Bare workflow
如果没有,您可以从 expo 中退出您的项目或使用react-native-cli 创建一个新项目并将您的源代码移至其中。
希望这对您有所帮助。如有疑问,请随意。
【讨论】:
以下代码对我有用!
state = {
isLoading:false,
location:null,
errorMessage:null,
isDevice:"",
}
async componentDidMount() {
if (Platform.OS === 'android' && !Constants.isDevice) {
this.setState({
errorMessage:"oops, this will not work on sketch in an android emulator.Try it on your device!"
});
} else {
this._getLocationAsync();
}
}
_getLocationAsync = async () => {
let { status} = await Permissions.askAsync(Permissions.LOCATION);
if (status !== 'granted') {
this.setState({
setError:'Permission to access location was denied'
});
}
let location = await Location.getCurrentPositionAsync({});
this.setState({
location
})
console.log(location)
}
【讨论】:
可以使用apktool 编辑AndroidManifest.xml,然后使用apksigner 使用来自expo credentials:manager 的凭据重新签名apk。
编辑现有清单:
apktool decode myapp-original.apk
vim myapp-original/AndroidManifest.xml
要重新构建一个新的签名 apk:
apktool build myapp-original -o myapp.apk
expo credentials:manager -p android
/path/toAndroid/Sdk/build-tools/$VERSION/apksigner sign -ks @username__myapp.bak.jks myapp.apk
【讨论】:
Expo 近年来发生了相当大的变化,您现在可以(Expo SDK 41+)使用config plugins 更改您的AndroidManifest.xml 并且仍然保留在托管工作流程中。您将无法使用 Expo Go 应用程序,但您可以使用 EAS 构建来构建自定义开发客户端,这基本上是为您的项目量身定制的 Expo Go 版本。
文档提供了一个example,说明如何使用withAndroidManifest mod 修改权限。请注意,您可以运行expo prebuild --no-install 来测试您的插件的效果,但请务必在运行 EAS 构建之前删除生成的本机文件夹,否则 EAS 将假定工作流。
【讨论】: