Android 接入支付宝在手机未安装支付宝客户端的情况下掉不起支付宝sdk的h5页面

最近公司项目需要对接支付宝移动支付,按照支付宝开发文档一步步往项目中集成,一开始还是比较顺利的,因为测试手机上安装了支付宝客户端,当我把支付宝卸载后,问题出现了,因为支付宝sdk本身就进行了客户端是否安装的判断,安装了会呼起支付宝客户端,未安装会调用内置的H5支付界面。现在H5界面无法呼起了!!!然后一步步核对开发文档,是否有遗漏或者没有配置的,发现并没有,这就尴尬了,然后就各种百度搜索,网上的原因大多是在AndroidManifest中配置H5PayActivity,我配置了,混淆规则也按照要求配置了,然而就是不行啊。始终报错

{memo=系统繁忙,请稍后再试, result=, resultStatus=4000}

网上搜了一大堆没用的后,自己测试了后定位到应该是 没有HTTPClient 这个类

HttpClient

HttpClient 早期Android 程序员都封装过多网络请求库。在Android 6.0 后,google就取消了对Apache HTTP的支持。以后,相继出现了HttpUrlConnect 、okhttp .
Apache HTTP 客户端弃用影响采用非标准 ClassLoader 的应用其实,自 Android 6 发布,就移除了对 Apache HTTP 客户端的支持,而推荐改用 HttpURLConnection 类,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量, 从此我们变习惯这样使用 Apache HTTP API,即在 build.geadle 添加:


android {useLibrary 'org.apache.http.legacy'
}

就可以继续的使用httpClient。但是在9.0后,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。

androd P 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。
这句话怎么理解,也就是说默认 Apache HTTP API 不可用,即使在build.geadle申明了该库。
这种说法分两种情况: 运行在 android P 设备上的应用:

9.0上如何继续使用httpClient

Target 28 ,默认会报 NoClassDefFoundError,因为此库被禁止使用,要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Target < 28 可以和 android 6.0 一致。bootclasspath 是 linux 系统变量,是系统在启动时会预先加载的类,以提高系统性能,这是 小米 MIX(7.0)上的 bootclasspath 变量:

/system/bin/sh: /system/framework/core-oj.jar:/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/apache-xml.jar:/system/framework/org.apache.http.legacy.boot.jar:/system/framework/vivo-framework.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/vivo-media.jar:/system/framework/qcrilhook.jar:/system/framework/WfdCommon.jar:/system/framework/com.qti.location.sdk.jar:/system/framework/oem-services.jar:/system/framework/qcom.fmradio.jar: not found

变量中有:/system/framework/org.apache.http.legacy.boot.jar ,因此系统会帮我们加载,默认允许使用。
这是 android P 上的 bootclasspath 变量:

/system/framework/core-oj.jar:/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/bouncycastle.jar:/system/framework/apache-xml.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.hidl.base-V1.0-java.jar:/system/framework/android.hidl.manager-V1.0-java.jar:/system/framework/framework-oahl-backward-compatibility.jar:/system/framework/android.test.base.jar
generic_x86_64:/ $

是没有 apache 的 http 库的, 但是 他们有一个共同特点,就是系统内置了 apache 包, 在 /system/framework/目录下:

,但是我有一个困惑的地方,就是 同样 是运行在 android P 设备上 和 运行在 低版本上(>M) DexPathList 值确不一样:

android P :

PathClassLoader// 这是httpClient的 ClassLoader
DexPathList[[zip file “/system/framework/org.apache.http.legacy.boot.jar”,
zip file “/data/app/com.example.leixiang.demoapp-hOOUC7E0LuRvgmYC38vd5w==/base.apk”
],nativeLibraryDirectories=[/data/app/com.example.leixiang.demoapp-hOOUC7E0LuRvgmYC38vd5w==/lib/x86_64, /system/lib64]]

android N:

dalvik.system.PathClassLoader //这是httpClient的 ClassLoader
[DexPathList[[zip file “/data/app/com.example.leixiang.demoapp-1/base.apk”
],nativeLibraryDirectories=[/data/app/com.example.leixiang.demoapp-1/lib/arm64, /system/lib64, /vendor/lib64]]]

他们不同之处在于,android N 设备上的 DexPathList里面多了 apache的包,但是他们的加载器却都还是 PathClassLoader,我想可能是 P 系统上不再预先加载 apache http 相关类,所以把他加入 DexPathList? , 并且 P 之前的系统加载 bootclasspath 中类也是用的PathClassLoader?这个有待研究。

总结

支付宝sdk调用其h5PAyActivity需要 HTTPClient类的支持,希望入坑的朋友注意下

Android 接入支付宝在手机未安装支付宝客户端的情况下掉不起支付宝sdk的h5页面相关推荐

  1. Android 微信支付 判断用户手机是否安装微信客户端

    微信支付不像支付宝支付那样. 对于支付宝支付,当我们的APP程序开始调用支付宝SDK去支付的时候,它会自动去判断你手机是否已经安装了支付宝客户端,有的话直接调起客户端进行支付:没有的话,会调用sdk自 ...

  2. android 判断安装微信,Android开发中判断手机是否安装了QQ或者微信

    下面一段代码给大家分享了android中判断手机是否安装了qq或者微信,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 public static boolean isWeixinAv ...

  3. 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决

    最近APP出现一个很奇怪的问题,在Android 4.4.2和android 4.4.3系统上点击应用的快捷方式,打不开应用,而且会提示未安装程序. 确认了应用的MainActivity中设置了and ...

  4. android h 系统找不到指定路径,Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法-Go语言中文社区...

    本人第一次使用HBuilder联安卓机调试自己写的demo,遇到了一些棘手的问题,解决后把它记录下来希望能帮助刚进入这一领域的新手解决遇到的相同问题 问题描述1:使用HBuilder开发工具新建一个 ...

  5. Android 更新版本 应用程序未安装 解决办法

    问题描述 在做Android应用版本更新时遇到一个问题,在原始的版本中进行升级,下载了新版的app后安装时,手机报"应用未安装",升级失败. 如下图所示: 分析原因 主要有两个方面 ...

  6. Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法

    本人第一次使用HBuilder联安卓机调试自己写的demo,遇到了一些棘手的问题,解决后把它记录下来希望能帮助刚进入这一领域的新手解决遇到的相同问题 问题描述1:使用HBuilder开发工具新建一个 ...

  7. 在安卓手机上安装FTP客户端应用,实现通过手机访问计算机FTP服务器。

    为了实现手机与计算机之间的文件传输,我们应保证手机和计算机在同一局域网中,因此我们让计算机与手机连接到同一WIFI中,我们下载了猎豹WIIF,用电脑开启WIFI后,将手机接入WIFI,这样就保证了手机 ...

  8. 手机上安装FTP客户端软件(AndFTP),实现通过手机访问计算机FTP服务器

    服务器连接工具: IIS7服务器管理工具是一款windows全系下用于连接并操控基于windows和linux系统的VPS.VNC.FTP等远程服务器.云服务器的管理工具. 界面简单明了,操作易上手, ...

  9. 来源com.android.atsmt,海量图片和心灵洗礼说与谁听?初页可以帮你在手机上制作H5页面了...

    H5页面定稿之后,很多人都在讨论,这个世界要被改变了.其实在规则最终确定之前,H5页面就已经在影响我们的传播方式.分享内容丰富程度和对手机创作的理解. 而云起团队推出的App初页,可能会让用户对手机创 ...

最新文章

  1. 将Model对象转换成json文本或者json二进制文件
  2. float浮动的学习
  3. Linux查看系统信息命令实例
  4. 【Python】青少年蓝桥杯_每日一题_10.03_输出数据
  5. BOOST_CONSTANTS_GENERATE宏相关用法的测试程序
  6. 干货 | OneAPM研发总监高海强:百万并发云压测平台的关键技术
  7. 假期不能错过的音视频领域技术进展
  8. 如何保证消息队列的高可用?透彻分析源码
  9. 【转】WPF 给DataGridTextColumn统一加上ToolTip
  10. CCF201604-3 路径解析(解法二)(100分)(废除!!!)
  11. 如何挖掘评论中的关键信息
  12. Ionic3与Angular4新特性
  13. 移动端IOS自动化测试框架搭建-无坑
  14. 服务器主机密码忘记了怎么破解?
  15. GraphPB:Graphical representations of prosody boundary in speech synthesis论文阅读
  16. 数据库不存在 php报错,如何实现“当名字在数据库中不存在时,转到错误页面。”?...
  17. 微信公众号之接入微信公众号服务器开发(一)
  18. PHPMailer远程命令执行漏洞复现
  19. Tita OKR分享:我们提出的OKRs-E是什么?
  20. 阿里云ECS学习笔记1

热门文章

  1. Excel函数带你看透身份证号
  2. Win11系统频繁断网怎么办?Win11网络不稳定的解决方法
  3. IMAGE WARPING (IDW+RBF)
  4. 微信点餐系统——用Enum枚举来保存商品状态
  5. 基于php+mysql的手机销售管理系统
  6. 光E电小家庭要如何理财
  7. Java基础知识系列之-抽象abstract
  8. autojs ui界面模板3
  9. [4G5G专题-91]:流程 - 4G LTE 终端移动性管理总体概述
  10. weixin-java-pay实现APP微信支付与退款