openssl移植Android使用及其相关经验分享

   阅读
【分享】openssl移植Android使用及其相关经验分享
1. linux安装openssl库

参见《精通PKI网络安全认证技术与编程实现》2.3.2节 Linux下搭建OpenSSL开发环境

Linux下面解压tar.bz2文件:tar jxvf android-ndk-r5c-linux-x86.tar.bz2

 

2. 配置NDK的环境变量

在~/.bashrc文件末尾添加:
NDK=~/android-ndk-r4b
export NDK

 

执行source ~/.bashrc

如果有终端已经运行,需要在重启终端才能使用NDK变量

3. JNI介绍

JNI主要功能就是能够调用到C库,在这里我们需要用C或C++调用openssl库实现加密签名等功能,然后编译成arm体系的so库,用java调用提供的接口。


详细介绍参见此书:《TheJava Native Interface: Programmer’s Guide and Specification》

4. 下载android版本的openssl,编译

现在网上我看见过3种版本的android-openssl,fries版本,eighthave版本以及guardianproject版本,前面两个版本有测试过但是没有尝试成功,guardianproject版本编译成静态库再给android的JNI动态库程序调用的话会找不到方法,不清楚是什么原因,但是直接将JNI程序与openssl工程一起编译就可以实现。

下面这个blog有说编译openssl静态库给android用,但是不知道他用的是什么版本的Openssl,我按照他的方法尝试没有成功。

http://blog.csdn.net/someonea/article/details/6312213

 

guardianproject版本原版下载地址:

https://github.com/guardianproject/openssl-android

我修改过的版本:

http://download.csdn.net/source/3408214

在我修改过的版本中可以直接在myAPP文件夹下编写JNI程序,与Openssl一起打包编译成动态库就行了。

编译时可能出现一些undefined reference,大部分可能是没有添加链接库,有些情况也可能是NDK版本问题,最好用最新版本的NDK(我用的r5c),注意有没添加以下两个静态库

LOCAL_LDLIBS := -lz –ldl

------解决方案--------------------
谢谢分享~~~~
------解决方案--------------------
真好!
谢谢分享,必须加精!
------解决方案--------------------
学习了,谢谢
------解决方案--------------------
不错的,谢谢了
------解决方案--------------------
全国电子竞赛历年真题
------解决方案--------------------
好的答复
------解决方案--------------------
不错的,谢谢了
------解决方案--------------------
领教了~~~~
------解决方案--------------------
好东西~~
------解决方案--------------------
学习,收藏!
------解决方案--------------------
很好,学习了
------解决方案--------------------
好很好
------解决方案--------------------
看上去不错
------解决方案--------------------
xuexi
------解决方案--------------------
KANKANASDASDASD
------解决方案--------------------
欣赏高招
------解决方案--------------------
谢谢分享
------解决方案--------------------
这个要收藏
------解决方案--------------------
android本身源码中自带openssl,直接拿来拖到ndk下就可以编译了。。。另外我不知道lz提供的某篇blog中的静态库为什么不能编译成功?我测试了下应该是可以的。
最后还是感谢lz分享,很喜欢lz分享使用经验和遇到的问题,我觉得这样比网上单纯的叫你怎么编译好多了
------解决方案--------------------
openssl是个好东东啊,可惜当年没有好好研究!
------解决方案--------------------
内容存入剪贴板

------解决方案--------------------
探讨
阅读