2016-10-03 19 views
1

我能成功打造的OpenSSL 1.0.2j爲Android(libcrypto.so和libssl.so)使用GitHub stdchpie/android-openssl編譯OpenSSL的不同的名字,由於Android的受精卵

  • 環境:Linux操作系統,(我的情況我使用的是Mac OS)

  • 的Android NDK:12B

在Android 5.x的,如果使用:

System.loadLibrary("crypto"); 
System.loadLibrary("ssl"); 

它將與本地操作系統庫(它們也具有相同的名稱)發生衝突。而不幸的是,手動更改他們的名字不起作用。所以我想將它們編譯成不同的名稱,比如libcryptox.so和libsslx.so

我嘗試使用Makefile.org整天玩,但並不幸運。所以請別人告訴我該怎麼做。

+1

剛剛重命名庫不起作用的原因是共享庫在名爲'SONAME'的ELF頭中有一些元數據。 Android(至少較新的版本,不知道這是否適用於GB)用於'loadLibrary'。 –

+1

你必須編寫一個包裝器共享對象。包裝共享對象導出您需要的功能。它還靜態鏈接到OpenSSL,因此您不會收到由Zygote加載的OpenSSL的低級版本。另請參閱[如何將OpenSSL構建爲未版本化的共享庫](http://stackoverflow.com/a/24212330/608639)和[在Android應用程序中更改HttpClient的OpenSSL庫](http://stackoverflow.com/a/28392326/608639)。 – jww

+0

另請參閱OpenSSL wiki上的[OpenSSL和Android](https://wiki.openssl.org/index.php/Android);和[更新您的安全提供商以防範SSL漏洞](http://developer.android.com/training/articles/security-gms-provider.html)。 – jww

回答

1

該系統在運行時環境中加載這些庫,你不能使用的System.loadLibrary

您可以將使用本地DLOAD那些庫小NDK代碼。 最終,我認爲最好是通過普通的android API使用ssl api,因爲你永遠不知道他們會在下一個版本中做什麼。