好的,所以 Google 告诉我们“未声明后台位置访问”并且不允许我们发布我们的应用程序。我们没有使用背景位置,所以我们试图完全消除它。
当然我的 list 没有它:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="com.android.vending.BILLING" />
<uses-feature android:name="android.hardware.location.gps"/>
我已经到处搜索了可能将 ACCESS_BACKGROUND_LOCATION 添加到我们的应用程序的任何内容,但一无所获。使用银色搜索器:
ag ACCESS_BACKGROUND_LOCATION .
我已经检查了责备报告以寻找线索,并在任何带有“背景”一词的内容上倒退,但无济于事:android/app/build/intermediates/manifest_merge_blame_file/myAppRelease/manifest-merger-blame-myapp-release-report.txt
我确实找到了一些额外的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
但我在那里没有看到任何危险信号..我试过节点删除选项:
<manifest ...xmlns:tools="http://schemas.android.com/tools"...>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove" />
但什么都没有。我也运行过 aapt2
$ aapt2 d permissions android/app/build/outputs/apk/myapp/release/app-myapp-release.apk
package: com.myapp
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'
uses-permission: name='android.permission.ACCESS_FINE_LOCATION'
uses-permission: name='android.permission.SYSTEM_ALERT_WINDOW'
uses-permission: name='com.android.vending.BILLING'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='android.permission.WAKE_LOCK'
这并没有告诉我更多..我还观看了谷歌发布的关于背景位置的整个 youtube 视频,阅读了官方文档,并检查了关于此的每个堆栈溢出帖子——但他们只是推荐了我已经采取的步骤。
这是一个令人筋疲力尽的过程!我累极了。我最好的猜测是我们的一个依赖是问题,但我没有很好的线索来判断它可能是哪一个。
真的很感激一些新鲜的眼睛..也许有人在下面的这些包中遇到了这个,就像,就是那个!删除它!
否则,它会回到绝望的搜索和基于最少信息的蛮力重建..
"dependencies": {
"@mapbox/geo-viewport": "0.4.1",
"@mapbox/geojson-extent": "0.3.2",
"@mapbox/polyline": "1.1.1",
"@ptomasroos/react-native-multi-slider": "1.0.0",
"@react-native-community/async-storage": "1.12.0",
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/netinfo": "4.7.0",
"@react-native-mapbox-gl/maps": "7.0.8",
"@sentry/react-native": "1.8.2",
"@turf/along": "^6.0.1",
"@turf/bearing": "^6.0.1",
"@turf/distance": "^6.0.1",
"@turf/helpers": "^6.1.4",
"@turf/line-distance": "^4.7.3",
"@turf/nearest": "^4.7.3",
"check-node-version": "4.0.3",
"deprecated-react-native-listview": "^0.0.6",
"eslint-plugin-react": "7.21.2",
"install": "^0.13.0",
"npm": "6.14.8",
"prop-types": "^15.6.0",
"react": "16.11.0",
"react-native": "0.62.2",
"react-native-billing": "^3.0.0",
"react-native-config": "^1.4.2",
"react-native-elements": "^1.2.7",
"react-native-gesture-handler": "1.8.0",
"react-native-in-app-utils": "6.1.0",
"react-native-linear-gradient": "^2.5.6",
"react-native-mixpanel": "1.2.5",
"react-native-rate": "1.0.9",
"react-native-safe-area-context": "^3.1.8",
"react-native-screens": "2.8.0",
"react-native-splash-screen": "3.2.0",
"react-native-sqlite-2": "1.7.0",
"react-native-vector-icons": "^6.6.0",
"react-native-webview": "10.9.3",
"react-navigation": "4.0.10",
"react-navigation-stack": "2.0.16",
"url": "^0.11.0",
"util": "0.12.3",
"which-polygon": "2.2.0"
},
"devDependencies": {
"babel-eslint": "^10.1.0",
"eslint": "^6.8.0",
"eslint-plugin-import": "2.22.1",
"fs-extra": "^8.1.0",
"jetifier": "1.6.6",
"metro-react-native-babel-preset": "^0.58.0",
"minimatch": "^3.0.4",
"node-watch": "0.6.4",
"rimraf": "2.7.1"
}
希望右眼能看到这一点,或者可以指出一些东西..谢谢!更新,从谷歌获得了更多细节:
Since your app does not need background location, please request to remove background usage and reach compliance:
If you are targeting Android 10 or newer (SDK level 29 or higher): Remove the ACCESS_BACKGROUND_LOCATION permission from your app APK or app bundle. If you’re using ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION, examine your code paths and restrict usage to foreground purposes only. (learn more: https://developer.android.com/training/location/background) You should no longer see the Location declaration listed in console under App Content. If your are targeting Android 9 or older (SDK level 28 or lower): If you’re already using ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION, examine your code paths and restrict usage to foreground purposes only. (learn more: https://developer.android.com/training/location/background) In your console declaration, select “No” to the question “Does your app access location in the background in APKs or app bundles targeting Android 9 or older?
最佳答案
我不是通过从 .js
中删除“ACCESS_BACKGROUND_LOCATION”来解决这个问题的。喜欢 grep -r "ACCESS_BACKGROUND_LOCATION" . | cut -c1-150
确实如此,但只是从 .java
中删除“ACCESS_BACKGROUND_LOCATION”喜欢:
sed -i -e "s/.*ACCESS_BACKGROUND_LOCATION.*/return true;/g" node_modules/expo-location/android/src/main/java/expo/modules/location/LocationModule.java
关于android react-native在谷歌审批过程中避免 "Background location access not declared",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66362196/