# Android で OpenSSL が上手く動作しない理由について ## 解ったこと * https://indy.fulgan.com/SSL/ から落とせる OpenSSL ライブラリは 32bit 版 * x86, armeabi-v7a 版が提供されている。必要なのは arm64-v8a 版 * Android 64 に対応したのが 10.3.3 (2019/11/21) からなので仕方ない部分もある * このため apk にこれらを含めても dlopen でエラーが発生する ※dlopen は SharedObject を Dynamic Link する POSIX API * Android 7.0 以降は dlopen が通常の POSIX の動作と異なる * 具体的には dlopen にブラックリスト方式のライブラリ管理が追加された * ブラックリストに含まれる SO は開けずエラーになる * ブラックリストには libssl.so と libcrypto.so が含まれる * BoringSSL のファイル名は互換性のため上記の2つと同名であり NDK からは使えない ## 解決策 ### 1. Android NDK を使って OpenSSL を自分でビルドする * **利点** * OpenSSL さえビルド出来れば既存のコードはそのまま利用可能 * **問題点** * OpenSSL が更新される度に更新するのが面倒 * OpenSSL がなんだかオワコン感がある * BoringSSL がフォークされていることからも明らか ### 2. javax.net.ssl.SSLSocket を使うようにする * **利点** * Google のオススメ * 将来、別の SSL 実装に切り替わっても恐らく大丈夫 * **問題点** * Delphi が NDK ベースで Android SDK を極力排除している原則から外れる * NDK ベースなので POSIX 準拠の API 郡を使えている(機種間依存がない) * Android SDK のバージョン依存が起きる ## 実装 ### 1. OpenSSL をビルド 何もなし ### 2. javax.net.ssl.SSLSocket を使用 下記、どちらの場合も想定工数は 1~3日(恐らく実装1日, 確認1日) 1. Delphi 上で全て済ませる * Delphi では全ての Java class をシームレスに利用可能 2. Java で必要なメソッドを用意した class を作成し Java2OP でブリッジファイルを作る ## 細川の勝手なおすすめ 上が上手くいかない場合、下に流れます。 1. Android 64bit 版 OpenSSL をどこかの優しい人がビルドしていないか探す(~~今日の残り時間~~) 1. javax.net.ssl.SSLSocket を Delphi から使って見る 1. Java でコーディングして Java2OP を使ってブリッジファイルを使う 1. OpenSSL をビルド
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up