NDK 编译openssl

6 篇文章 1 订阅
3 篇文章 0 订阅

 来次某位大神的脚本,修改后可以自用

测试版本 : openssl-1.1.0e

测试环境 : Ubuntu 18.04

第一步:配置环境变量

vi /etc/profile

++++++
export ANDROID_NDK=/root/ndk/android-ndk-r14b
++++++

source /etc/profile

第二步:修改脚本,得到需要的静态库、动态库

#!/bin/sh

if [! -f "openssl-1.1.0e.tar.gz" ]; then
    wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
fi

if [! -d "openssl-1.1.0e" ]; then 
    tar zxf openssl-1.1.0e.tar.gz
fi

# env
if [-d "out/openssl" ]; then
    rm -fr "out/openssl"
fi

mkdir "out"
mkdir "out/openssl"

_compile() {
    SURFIX=$1
    TOOL=$2
    ARCH_FLAGS=$3
    ARCH_LINK=$4
    CFGNAME=$5
    ARCH=$6

    if [! -d "out/openssl/${SURFIX}" ]; then
        mkdir "out/openssl/${SURFIX}" 
    fi

    if [! -d "toolchain_${SURFIX}" ]; then
        $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=${ARCH} --install-dir=./toolchain_${SURFIX}
    fi
    export ANDROID_HOME=`pwd`
    export TOOLCHAIN=$ANDROID_HOME/toolchain_${SURFIX}
    export CROSS_SYSROOT=$TOOLCHAIN/sysroot
    export PATH=$TOOLCHAIN/bin:$PATH
    export CC=$TOOLCHAIN/bin/${TOOL}-gcc
    export CXX=$TOOLCHAIN/bin/${TOOL}-g++
    export LINK=${CXX}
    export LD=$TOOLCHAIN/bin/${TOOL}-ld
    export AR=$TOOLCHAIN/bin/${TOOL}-ar
    export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
    export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
    export ARCH_FLAGS=$ARCH_FLAGS
    export ARCH_LINK=$ARCH_LINK
    export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
    export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
    export LDFLAGS="${ARCH_LINK}"


    cd openssl-1.1.0e/
    ./Configure ${CFGNAME} --prefix=$TOOLCHAIN/sysroot/usr/local --with-zlib-include=$TOOLCHAIN/sysroot/usr/include --with-zlib-lib=$TOOLCHAIN/sysroot/usr/lib zlib no-asm no-shared no-unit-test
    make clean
    make -j4
    #make install
    make install_sw
    make install_ssldirs
    cd ..
    mv openssl-1.1.0e/libssl.a out/openssl/${SURFIX}/ 
    mv openssl-1.1.0e/libcrypto.a out/openssl/${SURFIX}/
}


# arm
_compile "armeabi" "arm-linux-androideabi" "-mthumb" "" "android" "arm"

# armv7
_compile "armeabi-v7a" "arm-linux-androideabi" "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" "-march=armv7-a -Wl,--fix-cortex-a8" "android-armeabi" "arm"

# arm64v8
_compile "arm64-v8a" "aarch64-linux-android" "" "" "android64-aarch64" "arm64"

# x86
_compile "x86" "i686-linux-android" "-march=i686 -m32 -msse3 -mstackrealign -mfpmath=sse -mtune=intel" "" "android-x86" "x86"

# x86_64
_compile "x86_64" "x86_64-linux-android" "-march=x86-64 -m64 -msse4.2 -mpopcnt  -mtune=intel" "" "android64" "x86_64"

# mips
_compile "mips" "mipsel-linux-android" "" "" "android-mips" "mips"

# mips64
_compile "mips64" "mips64el-linux-android" "" "" "linux64-mips64" "mips64"

echo "done"

第三步:编译:

chmod 777 XXX

./XXX

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用NDK编译OpenSSL的方法如下: 1. 下载OpenSSL源代码和NDK。 2. 将OpenSSL源代码解压到一个目录下,比如 `~/openssl-1.1.1g`。 3. 在 `~/openssl-1.1.1g` 目录下创建一个名为 `Application.mk` 的文件,文件内容如下: ``` APP_ABI := armeabi-v7a APP_PLATFORM := android-21 ``` 其中 `APP_ABI` 表示编译的目标平台,这里选择 `armeabi-v7a`;`APP_PLATFORM` 表示使用的Android版本,这里选择 `android-21`。 4. 在 `~/openssl-1.1.1g` 目录下创建一个名为 `Android.mk` 的文件,文件内容如下: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := openssl LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/crypto/*.c) LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/ssl/*.c) LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_CFLAGS := -DOPENSSL_NO_ASM -DOPENSSL_ANDROID LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) include $(BUILD_SHARED_LIBRARY) ``` 其中 `LOCAL_MODULE` 表示生成的库文件名,这里设为 `openssl`;`LOCAL_SRC_FILES` 表示需要编译的源文件;`LOCAL_C_INCLUDES` 表示头文件路径;`LOCAL_CFLAGS` 表示编译选项,这里禁用汇编和启用Android特有的宏定义;`LOCAL_LDLIBS` 表示链接库,这里链接 `liblog.so`。 5. 在终端中进入 `~/openssl-1.1.1g` 目录,执行以下命令: ``` $ export NDK_HOME=/path/to/ndk $ $NDK_HOME/ndk-build ``` 其中 `/path/to/ndk` 是NDK的安装路径。执行完毕后,在 `~/openssl-1.1.1g/libs/armeabi-v7a` 目录下会生成 `libopenssl.so` 文件。 6. 将 `libopenssl.so` 文件复制到Android工程的 `libs/armeabi-v7a` 目录下。 7. 在Android工程的 `build.gradle` 文件中添加以下代码: ``` android { // ... sourceSets { main { jniLibs.srcDirs = ['libs'] } } } ``` 这样就可以在应用中使用OpenSSL库了。 注意:在使用OpenSSL时,需要在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值