分析思路:
1.前期对比分析
1)找相同android版本的对比机 (google pixel)连接同样的wifi和登录相同的google账号,看看能否找到这2个应用
——google pixel2(通话版)能搜到百度地图,搜不到腾讯地图
2)在Chrome浏览器 play.google.com网站能否搜到app?
——能搜到百度地图,搜不到腾讯地图(综合1、2说明Play Store服务器没有腾讯地图App),但是点击百度地图下载时跳到Google Play Store里面,提示 没优化,不兼容该App
3)安装第三方app市场,例如应用宝,看看能否搜到app?
——都能搜到,这说明第三方的应用市场服务器有百度地图和腾讯地图App
-
adb shell dumpsys package> package.log获取设备Features,如下图:
从上图未找到android.hardware.telephony feature。 -
通过反编译百度apk查看AndroidManifest.xml,从中可以看到app申明的feature。如下:
AndroidManifest.xml
反编译百度apk,查看AndroidManifest.xml截图如下:
上图的 android:name="android.permission.CALL_PHONE"权限,该权限需要android.hardware.telephony feature,而WiFi only非通话版平板设备是没有该feature的,所以导致搜索不到百度地图App。
4.cp frameworks/native/data/etc/android.hardware.telephony.gsm.xml $OUT_DIR/target/product/xxx/vendor/etc/permissions/,
make -j24 vendorimage-nodeps,然donwload vendor image,刷机之后还是搜不到百度地图!在命令行使用adb shell "dumpsys package features|grep telephony"命令输出为空;但是用userdebug版本push带有
feature name=“android.hardware.telephony”
和feature name=“android.hardware.telephony.gsm” feature的android.hardware.telephony.gsm.xml文件到机器里可以搜到百度地图,通过解压out目录下的vendor.img文件查看android.hardware.telephony.gsm.xml也是带有这两个feature的,但是在刷完机开机的时候进到vendor/etc/permissions/目录查看android.hardware.telephony.gsm.xml文件却是空的,所以推测是在开机检测该设备是非通话版的时候把这两个feature给去掉了。
综上所述,问题的原因是BAIDU MAPS required android.hardware.telephony feature,但是非通话平板设备没有此feature,导致Play Store过滤掉了该App,不会呈现给非通话设备下载。这是Google的Play Store根据设备的Feature过滤应用给设备下载的一个机制(具体参见网址https://blog.csdn.net/chengjiamei/article/details/52064673)。
解决方案:
1.反馈该信息给baidu 团队,让他们在AndroidManifest.xml增加下面的內容:
uses-feature android:name=“android.hardware.telephony” android:required=“false”
2.跟客户解释其原理,让客户接受不能下载百度地图等的原因。
附部分权限与功能之间的联系: