1. 程式人生 > >NDK開發筆記——Android使用openssl

NDK開發筆記——Android使用openssl

Android自身使用了谷歌的openssl分支boringssl,因此,如果要在Android中使用openssl,需要編譯成靜態庫整合在自己的程式當中。

為Android編譯openssl,首先需要獲取到openssl的原始碼和Android ndk,利用ndk中的交叉編譯工具鏈編譯出需要的openssl庫。具體的配置可參照https://www.jianshu.com/p/b790c548e787,我使用的ndk版本是r17b,openssl版本是1.1.0h

這裡需要注意的是的Android NDK可能會缺少標頭檔案,交叉工具鏈預設的包含目錄是沒有需要的包含目錄的,需要手動新增

export C_INCLUDE_PATH='$ANDROID_NDK_ROOT/sysroot/usr/include/'

這裡還可能遇到缺少asm目錄下的標頭檔案,這些標頭檔案可以在ndk目錄裡找到對應工具鏈的asm目錄拷貝出去,編譯時缺少的標頭檔案都可以在該資料夾下搜尋並複製到對應目錄。

編譯完之後可能會有連結的問題,如

./libcrypto.a(bio_cb.o):bio_cb.c:function BIO_debug_callback: error: undefined reference to 'stderr'

這個問題跟編譯選擇的對應Android版本有關,在NDK的stdio.h中有如下的定義

#if __ANDROID_API__ >= __ANDROID_API_M__
extern FILE* stdin __INTRODUCED_IN(23);
extern FILE* stdout __INTRODUCED_IN(23);
extern FILE* stderr __INTRODUCED_IN(23);

/* C99 and earlier plus current C++ standards say these must be macros. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
#else
/* Before M the actual symbols for stdin and friends had different names. */
extern FILE __sF[] __REMOVED_IN(23);

#define stdin (&__sF[0])
#define stdout (&__sF[1])
#define stderr (&__sF[2])
#endif

由於openssl編譯時沒有android api巨集,當編譯的目標版本小於android m也就是23的時候,編譯會報錯,這時編譯指定android的版本大於23即可,這樣做會對相容性產生什麼影響尚未驗證。

編譯成功生成了.a檔案之後,將其放入app的工程中,可能也會產生各種編譯的錯誤,這裡需要調整sdk的版本和最小相容版本,具體能相容到哪個版本待驗證。

編譯成功之後執行時可能會產生java.lang.UnsatisfiedLinkError錯誤,大意是64位程式引用32位庫的問題,

在生成的apk的lib中會有各個平臺的資料夾比如armv8這裡需要在build.gradle中寫入

android {
    ...defaultConfig {
        ...
        ndk {
            abiFilter("armeabi-v7a"
) } } }
來過濾掉其它的庫

在gradle.properties中新增

android.useDeprecatedNdk=true

相關推薦

Ndk開發筆記

pla 框架 miss start 它的 ndk plus ner 通過 <pre name="code" class="cpp">ndk開發: 1.編譯android本地程序的二種方法.q 2.安裝ndk編譯工具. 3.編寫android.apk程序. 4

NDK開發筆記——Android使用openssl

Android自身使用了谷歌的openssl分支boringssl,因此,如果要在Android中使用openssl,需要編譯成靜態庫整合在自己的程式當中。為Android編譯openssl,首先需要獲取到openssl的原始碼和Android ndk,利用ndk中的交叉編譯

NDK開發筆記---CMake構建JNI

  從AndroidStudio2.2版本開始,預設使用 CMake 的方式來構建NDK專案,也可以使用 ndk-build 的方式,這裡我們主要介紹 CMake 的方式。   首先,介紹 NDK

NDK開發筆記(一)---環境搭建

安裝NDK開發環境:   結果: 執行 cygwin ,在彈出的命令列視窗輸入: cygcheck -c cygwin 命令,會打印出當前 cygwin 的版本和執行狀       態,如果 status 是 ok 的話,則 cygwin 執行正常。       然後依次

Android NDK開發及OpenCV初步學習筆記

-a cep cto strip 鏈接 jni 加載 idt jniexport https://www.jianshu.com/p/c29bb20908da Android NDK開發及OpenCV初步學習筆記 Super_聖代 關註 2017.08.19 00:

Android逆向基礎筆記—Android NDK開發2之Windows下的gcc手動編譯(交叉連編譯)和利Linux Ubuntu系統下的交叉工具鏈手動編譯

一、交叉工具鏈 這些工具都在NDK的路徑下:E:\Android\android-ndk-r13\toolchains\arm-linux-androideabi-4.9\prebuilt\windo

Android學習筆記之:NDK開發環境配置

   NDK 即Native Development Kit,因此又被Google稱為“NDK”。 1,提高程式的效能:把需要高效能的應用邏輯使用C開發, 2,程式程式碼進行保護:因為反編譯C/C++

Android逆向基礎筆記—Android NDK開發4之Android studio NDK自動編譯

這部分就是最後的部分了,為什麼要寫Android studio呢。大家知道,eclipse 到了現在,已經不被Google支援了,所以現在最好的開發就是利用Android studio。雖然說,網上有

微信公眾號開發筆記1(nodejs開發的)

.post err log 加密 課堂 是我 targe 分享 gty 本篇記錄了微信公眾號開發的一些筆記 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自

張高興的 Windows 10 IoT 開發筆記:使用 ULN2003A 控制步進電機

uln2003 zhang windows iot ges 開發 ima dem win   GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ULN2003A   張高興的 Wind

張高興的 Windows 10 IoT 開發筆記:三軸數字羅盤 HMC5883L

cnblogs -i mas https http png 開發 target 分享   註意,數據不包含校驗,準確的來說我不知道怎麽校驗,但方向看起來差不多是對的。。。   GitHub:https://github.com/ZhangGaoxing/windows-io

Android NDK 開發總結

設置 .text nbsp def runt 編寫 abi 文件的 targe 一.安裝配置環境 1.安裝Android Studio,下載路徑https://developer.android.com/studio/index.html?hl=zh-cn。我下載的是Win

JNI/NDK開發指南(2)

清除 onu 呼叫 rac 個人理解 運行 ati clas 函數 1.生成動態庫.so,存放於手機的system/lib/中(APP怎樣將.so存入該文件夾,奇怪?????),Java層調用JNI的類會運行靜態代碼System.loadLibrary("***")將手

微信開發筆記-調用自定義分享接口

彈出菜單 菜單 開發筆記 n-1 onf target ready 模式 時間戳 文章來自:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html 引言:   工作中開發微信網站,簡稱微網站。由於微

Android開發筆記(12)——ListView & Adapter

dba 只顯示一行 -1 ngs 而已 整理 adapt array xxx 轉載請註明:http://www.cnblogs.com/igoslly/p/6947225.html 下一章是關於ListFragment的內容,首先先介紹ListView的相關配置,理解L

android NDK開發中,用Cygwin調試本地代碼時報錯“Another debug session running,Use --force to kill it”原因及解決的方法

能夠 att cati kill 時報 andro 使用 deb gdb調試 在使用ndk-gdb調試的時候。運行$NDK/ndk-gdb --verbose報錯“Another debug session running,Use --force to kil

微信二次分享功能開發筆記

如何 設置 _id 朋友 start 還需要 str one data   最近的一個項目在進行二次分享的時候出現了問題,定制的文案描述及圖片都不能在分享後出現,如圖所示:                           經過十八般折騰,終於變成我想要的樣式了,如圖:

Kinect開發筆記之三Kinect開發環境配置具體解釋

pc2 1.0 微軟 .aspx 技術分享 連接 實驗 family 不同 0、前言: 首先說一下我的開發環境,Visual Studio是2013的,系統是win8的64位版本號,SDK是Kinect for windows

CoolBlog開發筆記第4課:數據庫模型設計

的人 model類 set 來看 aid 想想 目錄 targe init 教程目錄 1.1 CoolBlog開發筆記第1課:項目分析 1.2 CoolBlog開發筆記第2課:搭建開發環境 1.3 CoolBlog開發筆記第3課:創建Django應用 前言   我新書《

Vue-cli開發筆記一----------項目的結構

web node lin sch scrip base via 裏的 ack 配置文件package.json: 搜索了配置的原理:https://segmentfault.com/a/1190000000344102 裏面講到:npm會在package.json文件中找s