Arch Linux Android Studio cmake "OPENSSL_1.0.0 not found" を解決する

/usr/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':project:externalNativeBuildCleanDebug'.
> Build command failed.
  Error while executing process ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake with arguments {--build ${HOME}/Project/project/.externalNativeBuild/cmake/debug/armeabi --target clean}
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libssl.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libssl.so.1.0.0: version `OPENSSL_1.0.1' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

適当にアップデートしてたら遭遇してしまいました。

とりあえずぐぐると一番上にStack Overflow、さすが。

stackoverflow.com

この中ではopensslパッケージをダウングレードすれば良いと書かれてますが、個人的に嫌でした。

下の方までスクロールしていくと「studio.shを編集する」という回答があります。

これでも良かったんですが、Android Studioのアップデートでパッチを当てるたびにconflictが出るのもめんどくさそうなので、別の対処法を取りました。

対処法

opensslをビルドして専用のディレクトリにインストールする。起動時にLD_LIBRARY_PATHを指定する。

微妙といえば微妙ですが、Android StudioやArch Linuxのパッケージアップデートのたびに問題起こるよりマシな感があったので……。

1. libresslをダウンロードする。
2. インストールフォルダを指定してビルドする。
3. インストールする。ちょっと小細工する。
4. 起動時に `LD_LIBRARY_PREFIX` で専用ディレクトリを指定する。
5. (๑•̀ㅂ•́)و✧

1. libresslをダウンロードする。

https://www.libressl.org/

wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.4.tar.gz

2. インストールフォルダを指定してビルドする。

cmakeを使っているので./configureを使う場合は適宜読み替え。

tar xvf libressl-2.5.4.tar.gz
mkdir libressl-2.5.4-build && cd libressl-2.5.4-build
cmake -D CMAKE_INSTALL_PREFIX=${YOUR_INSTALL_DIRECTORY} ../libressl-2.5.4
make -j`nproc`

3. インストールする。ちょっと小細工する。

CMAKE_INSTALL_PREFIXをつけてるのでmake installすればインストールはできるんですが、

Android Studioで入るcmakelibXXX.so.1.0.0を探すようです。 インストールしても上記のシンボリックリンクは作られないので適当に作ります。

make install
cd ${YOUR_INSTALL_DIRECTORY}/lib
ln -s libssl.so{,.1.0.0}
ln -s libcrypto.so{,.1.0.0}
# libtlsは使わないのでスルー

4. 起動時に LD_LIBRARY_PREFIX で専用ディレクトリを指定する

自分の起動方法に合わせて読み替えて下さい。僕はDesktop Entryから起動するので、

vim ~/.local/share/applications/jetbrains-studio.desktop

ファイルの内容は以下ですが、${HOME}${YOUR_INSTALL_DIRECTORY} のようなシェル変数の書き方をしてる部分は実際のパスに置き換えて下さい

[Desktop Entry]
Version=1.0
Type=Application
Name=Android Studio
Icon=${HOME}/Tools/android-studio/bin/studio.png
Exec=env LD_LIBRARY_PATH=${YOUR_INSTALL_DIRECTORY}/lib "${HOME}/Tools/android-studio/bin/studio.sh" %f
Comment=Develop with pleasure!
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-studio

Execのところでenv LD_LIBRARY_PATH=${YOUR_INSTALL_DIRECTORY} を指定してます。

これで解決しました。お疲れ様でした。