我的环境:ubuntu12.04, ndkr8
和
guardianproject-openssl-android-1a3c579
最近需要将openssl库编译成静态库给android使用,由于android自带的openssl静态库不支持engine机制,所以只好自己找方法来编译了。
编译首先需要安装ndk,这个不多说了
安装好ndk后
开始解压guardianproject-openssl-android,(你可以给这个文件夹改个名字),我把名字换成了android-openssl
cd android-openssl
这里需要修改几处代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.openssl.android"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
</manifest>
这里我用的android版本是10 所以里面添加10default.properties
target=android-10
然后进入jni文件夹
修改里面的
Application.mk
APP_PROJECT_PATH := $(shell pwd)
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/Android.mk
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-10
这里面的ABI可有可无,随自己的心情
接下来就需要修改几个重要的make文件
首先修改android-openssl/crypto/Android.mk:
要编译静态库,所以把include $(BUILD_SHARED_LIBRARY) 修改为 include $(BUILD_STATIC_LIBRARY)。
我们不需要编译Host库,所以可以把include $(BUILD_HOST_SHARED_LIBRARY)之类的都注释掉。
注意这里文件里面有3个include哦 看见有host注释的就不需要管了,只要修改第一个就行
同样的我们还需要修改ssl/Android.mk:
要编译静态库,所以把include $(BUILD_SHARED_LIBRARY) 修改为 include $(BUILD_STATIC_LIBRARY)。
host的不需要修改
最后保存文件
回到android-openssl目录 ndk-build,最后可以在obj文件夹下面看到了这两个静态库文件了
补充,如果需要动态库 的话 直接编译就可以 不需要多余的修改
但是这个不支持engine(我目前没有试过还不知道,等我测试过了我再修改)所以通常我们需要下载1.0.0的其他版本,将ssl和crypto 和include3个文件夹复制到这个项目的目录下面替换,然后编译,这样可能就可以解决这个问题,下面贴上另一篇文章,里面信息很多,希望能帮到大家
http://blog.youkuaiyun.com/someonea/article/details/6312213

本文介绍了如何在Ubuntu 12.04和NDK r8环境下,将guardianproject-openssl-android-1a3c579编译为适用于Android的静态库。主要步骤包括修改AndroidManifest.xml、default.properties、Application.mk和Android.mk文件,以适应静态库的编译,并通过ndk-build命令生成静态库。同时提到,若需要动态库,直接编译即可,但不支持engine机制,可能需要使用不同版本的OpenSSL进行替换。
1806

被折叠的 条评论
为什么被折叠?



