Sunday 14 May 2017

Linux - QT5 - Menambahkan library openssl dan libcrypto pada aplikasi android 7

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم


Karena library openssl dan libcrypto tidak ada pada bawaan instalasi QT5 maka kita perlu compile dulu. Caranya:
1. Download dulu source code nya dari https://www.openssl.org/source/. Yang sudah saya coba versi 1.0.2.

2. Copy script ini dan jadikan 1 file bernama "install.sh". Kalo perlu penyesuaian path bisa disesuaikan sendiri. Di system saya source filenya ada di "~/Downloads" sedangkan NDK folder nya di "/opt/android-ndk".

#!/bin/sh
tar xzvf ~/Downloads/openssl-1.0.2g.tar.gz
cd openssl-1.0.2g
# path to android ndk folder
export NDK=~/qt/android-ndk-r13b
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-9 --toolchain=arm-linux-androideabi-4.6 --install-dir=`pwd`/android-toolchain-arm
export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm/bin
export TOOL=arm-linux-androideabi
export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL}
export CC=$NDK_TOOLCHAIN_BASENAME-gcc
export CXX=$NDK_TOOLCHAIN_BASENAME-g++
export LINK=${CXX}
export LD=$NDK_TOOLCHAIN_BASENAME-ld
export AR=$NDK_TOOLCHAIN_BASENAME-ar
export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib
export STRIP=$NDK_TOOLCHAIN_BASENAME-strip
export ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "
export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "
export LDFLAGS=" ${ARCH_LINK} "
# the target of libraries files is armv7
cd ~/Downloads/openssl-1.0.2g && ./Configure android-armv7 share

3. Eksekusi dengan "./install".

4. Edit Makefile yang ada di folder hasil extract tadi "~/Downloads/openssl-1.0.2g" pake text editor kesayangan anda.
Cari bagian berikut,
LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \

Dan ganti dengan,
LIBNAME=$$i \

Kalo sudah disave dan close

5. Kembali ke terminal lalu di compile dengan perintah
make clean && PATH=$TOOLCHAIN_PATH:$PATH make

Ok setelah compilenya selesai, kopi librarynya ke folder project nya. File nya ada di root folder hasil extract tadi. Kemudian tambahkan path ke arah librarynya di file ".pro". Saya menambahkan subfolder untuk librarynya di "android/libs/openssl/armeabi-v7a/" maka tambanhannya adalah

android{
  ANDROID_EXTRA_LIBS += $$PWD/android/libs/openssl/armeabi-v7a/libcrypto.so
  ANDROID_EXTRA_LIBS += $$PWD/android/libs/openssl/armeabi-v7a/libssl.so

}

Dan sekian, dan semoga berhasil.