您的位置:首页 > 理论基础 > 计算机网络

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

2016-10-18 07:57 323 查看

关于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的作用

通过证书,认证用户和服务器.

加密数据

维护数据的完整性

第一次握手步骤

浏览器将自己支持的一套加密算法、HASH算法发送给网站

网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器

浏览器获得网站证书之后,开始验证证书的合法性,有效则取出证书公钥,加密数据发送到网站

网站接收浏览器发来的数据之后,解密并且HASH校验,完成握手.

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

SSL设置步骤

构造CertificateFactory对象,通过它的generateCertificate(is)方法得到Certificate

将Certificate放入到keyStore中

利用keyStore初始化TrustManagerFactory

利用TrustManagerFactory初始化SSLContext

mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory())

tomcat下部署Https

使用keytool生成证书xxx.jks,利用xxx.jks生成xxx.cer

tomcat/conf/sever.xml 下的 keystoreFile=”xxx.jks”

按上面的步骤设置证书,访问相应路径

双向验证

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

生成jks与cer

将cer导入一个新的jks,配置到tomcat,此时浏览器已不能访问网站

客户端重新load一个keystore,通过keystore初始化KeyManagerFactory,进而初始化sslContext

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息