OpenSSL을 NDK로 빌드하기

시작에 앞서

보통 실습 용도나 로컬에서 테스트를 할 경우에는 Precompiled library 를 사용해도 되지만 상용 프로그램에 포함할 경우 암호화 알고리즘 라이센스 문제가 발생할 수 있습니다.
문제가 되는 암호화 알고리즘을 제외한 Precompiled library 가 있으면 해결되지만, 특정 NDK, OpenSSL 버전을 맞춰야 하는 경우 이에 만족하는 라이브러리를 찾기가 힘들어서, 직접 빌드하는 편이 빠릅니다.

빌드 환경 및 사용 버전

  1. NDK r18b
  2. OpenSSL 1.0.2l
  3. Ubuntu 18.04

빌드 시작하기

  1. NDK 이용해 custom toolchain 생성

    (https://developer.android.com/ndk/guides/standalone_toolchain)

    1
    python3 $NDK/build/tools/make_standalone_toolchain.py --arch arm64 --api 26 --install-dir /opt/android-26-arm64
  1. OpenSSL 폴더로 이동

    1
    cd openssl-1.0.2l
  2. Clang 에서 '-mandroid' 를 지원하지 않으므로 Configure 파일에서 해당 부분 삭제

    1
    sed -i -e 's/-mandroid//' Configure
  3. Confiigure 시작

    1
    CROSS_COMPILE=/opt/android-26-arm64/bin/aarch64-linux-android- ./Configure android shared no-idea no-mdc2 no-rc5
  4. make 시작

    1
    2
    make depend
    make ANDROID_DEV=/opt/android-26-arm64/sysroot/usr CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" build_libs
  5. 생성된 library 가 올바르게 빌드 됐는지 확인

    1
    readelf -h ./libcrypto.a | grep -i 'class\|machine' | head -2