关于Android中.so库的坑和适配Https的注意事项

34 篇文章 0 订阅
2 篇文章 0 订阅

关于Android .so文件

概述

早期的Android只支持ARMv5的CPU,现在支持ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI.

关于ABI支持

很多设备都支持多于一种的ABI,ARM64和x86设备也可以同时运行armeabi-v7a和armeabi的二进制包,但最好是针对特定平台提供相应平台的二进制包,这种情况下运行时就少了一个模拟层,从而得到更好的性能。

容易出错的地方

UnsatisfiedLinkError:找不到java层引用的那个jni函数,
原因可能有:
1.没有调用System.loadLibrary()
2.底层库文件与上层Java jni文件对应的包名或类名不一致
3. 底层库文件与上层Java jni文件对应的函数名称不一致
dlopen: failed:
原因可能有:
c/cpp包名和java文件应该一致
加载不到正确的.so,包括没有或者放错位置.
参考: 安卓开发之so库加载使用的那些坑

兼容性

NDK平台不是后向兼容的,而是前向兼容的。推荐使用app的minSdkVersion对应的编译平台.

注意事项

不要混合使用不同C++运行时编译的.so文件,当存在多个.so文件时,应该让所有的.so文件都动态链接相同的C++运行时

不同架构的.so文件

编译我们的.so文件使其支持缺失的ABIs,或者设置ndk.abiFilters

与.so有关的一个常年大坑

为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致
对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹

Android Https

概述

HTTPS相当于HTTP的安全版本,它在HTTP的之下加入了SSL (Secure Socket Layer),SSL位于TCP/IP和HTTP协议之间

SSL的作用

  • 通过证书,认证用户和服务器.
  • 加密数据
  • 维护数据的完整性

第一次握手步骤

  1. 浏览器将自己支持的一套加密算法、HASH算法发送给网站
  2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器
  3. 浏览器获得网站证书之后,开始验证证书的合法性,有效则取出证书公钥,加密数据发送到网站
  4. 网站接收浏览器发来的数据之后,解密并且HASH校验,完成握手.

这里需要拿到包含公钥的证书(网站下载)

SSL设置步骤

  1. 构造CertificateFactory对象,通过它的generateCertificate(is)方法得到Certificate
  2. 将Certificate放入到keyStore中
  3. 利用keyStore初始化TrustManagerFactory
  4. 利用TrustManagerFactory初始化SSLContext
  5. mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory())

tomcat下部署Https

  1. 使用keytool生成证书xxx.jks,利用xxx.jks生成xxx.cer
  2. tomcat/conf/sever.xml 下的 keystoreFile=”xxx.jks”
  3. 按上面的步骤设置证书,访问相应路径

双向验证

需要再生成一对jks和cer,服务端需要一个cer,客户端需要jks

  1. 生成jks与cer
  2. 将cer导入一个新的jks,配置到tomcat,此时浏览器已不能访问网站
  3. 客户端重新load一个keystore,通过keystore初始化KeyManagerFactory,进而初始化sslContext
  4. mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory())

这里需要注意的是Android平台只支持BKS形式的证书,需要将jks转化为bks

//秘钥管理工厂,信任管理工厂,随机序列(Android 4.4之前存在安全漏洞)
sslContext.init(keyFactory.getKeyManagers(), tFactory.getTrustManagers(), new SecureRandom());

参考资料:
关于Android的.so文件你所需要知道的
与 .so 有关的一个长年大坑
Android Https相关完全解析 当OkHttp遇到Https

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值