Android下使用ACE開源網絡庫

   最近公司要求將PC平臺下的代碼移植到Android平臺,其中涉及到的ACE開源代碼,雖然ACE比較笨重,但由于種種歷史原因,我不可能將ACE給踢掉重新開發(fā),故需要解決ACE開源庫在Android下的編譯和使用問題,由于工程中使用多個第三方靜態(tài)庫,對于我這種半路出家的純C++程序猿來說,還是有些挑戰(zhàn)的,在此記錄大致過程,以方便其它同學參考,少走些彎路。

成都創(chuàng)新互聯公司主要從事網站建設、成都網站制作、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務紹興,十余年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

   首先請自行安裝Android開發(fā)工具:NDK(r9d)、jdk(jdk1.7.0_45)、ADT(v22.3.0-887826);

   ACE——6.0以后的版本已經自帶的Android下編譯的MakeFile,本人使用的版本是6.2.4,編譯需要安裝cygwin,請自行安裝,安裝時選擇Devel-install,安裝開發(fā)工具gcc、g++、ld等。

   備注:公司歷史版本為5.5.0,由于該版本尚未加入Android Makefile,但并非不支持,但較6.2.4并未出現大的改動,基本可以直接使用,當然如果你偏偏使用了它更改了的代碼的話,就需要你自行修改了。

   均安裝完畢后編譯ACE源代碼,進入cygwin

   1、設置環(huán)境變量:

   編輯~/.bash_profile文件,在最下方添加   

    NDK=D:/android-ndk-r9d

    export NDK

    

     ACE_ROOT=$NDK/sources/ACE-6.2.4

    export ACE_ROOT

    

    ANDROID_ARCH=arm

    export ANDROID_ARCH

    

    SYSROOT=$NDK/platforms/android-9/arch-arm

    export SYSROOT

    

    PATH=$PATH:$ACE_ROOT/toolchain/bin

    export PATH

   保存后,執(zhí)行命令 source ~/.bash_profile使其生效;

   2、生成交叉編譯環(huán)境

   執(zhí)行命令

   cd $NDK

   ./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.6 --arch=arm --platform=android-9 --install-dir=./sources/ACE-6.2.4/toolchain --system=windows-x86_64

   注:本人系統(tǒng)為window7 64bit,故需指定系統(tǒng)版本(--system=windows-x86_64)。

   3、ACE源代碼準備

   將源代碼解壓到$NDK/sources/ACE-6.2.4目錄下,并作適當的修改,分別為:

   a、新建ace/config.h文件,內容如下   

    #ifndef __ACE_INLINE__

    #define __ACE_INLINE__

    #endif

    #ifdef WIN32

    #include "ace/config-win32.h"

    #else

    #include "ace/config-android.h"

    #endif

   b、新建include/makeinclude/platform_macros.GNU文件,指定makefile,內容如下

               include $(ACE_ROOT)/include/makeinclude/platform_android.GNU

          c、輯$(ACE_ROOT)/ace/Basic_Types.h,在適當位置添加如下代碼:        

    #if defined(ANDROID)

    #  include <sys/endian.h>

    #endif

    備注:由于在單獨使用ace/ACE.h或ace/Basic_Types.h時,ACE對ACE_BYTE_ORDER的定義自相矛盾,所以此處在判斷出是Android時,強行導入android下的大小頭定義文件。

          d、打開$(ACE_ROOT)/include/makeinclude/platform_android.GNU, 并加入如下代碼:

               CPPFLAGS += -DANDROID

               編譯ACE靜態(tài)庫,故需添加如下命令:

                static_libs=1

               備注:如果提示arm-linux-androideabi-g++不存在,請在此文件中CROSS_COMPILE的定義處修改為:

                CROSS_COMPILE=$(ACE_ROOT)/toolchain/bin/arm-linux-androideabi-

            4、編譯

                只編譯ACE源代碼,不編譯sample等其它代碼,進入

    cd $ACE_ROOT/ace

    make

     等待編譯完成,會自動生成到$ACE_ROOT/lib目錄。

   5、使用

     在此列出其中一個工程使用libACE.a的android.mk文件

    LOCAL_PATH := $(call my-dir)

    

    include $(CLEAR_VARS)

    

    LOCAL_ARM_MODE := arm

    LOCAL_MODULE := libNetwork

    LOCAL_MODULE_TAGS := optional

    LOCAL_CPP_EXTENSION := .cpp

    LOCAL_SRC_FILES := \

    

    LOCAL_C_INCLUDES := \

        $(LOCAL_PATH)

    

    LOCAL_CFLAGS := \

       '-DANDROID' \

       '-DANDROID_ACE' \

       '-D__ACE_INLINE__'

    

    LOCAL_WHOLE_STATIC_LIBRARIES := \

     p2p_lib \

     p2p_client \

     p2p_media \

     ACE

    

    LOCAL_SHARED_LIBRARIES := \

    libstlport

    

    LOCAL_LDLIBS += -llog -ljnigraphics -lz -landroid

        

    include $(BUILD_SHARED_LIBRARY)

     相關內容請自行添加;

     本工程最終生成libNetwork.so文件,鏈接到的靜態(tài)庫均有依賴ACE代碼,故在LOCAL_WHOLE_STATIC_LIBRARIES中將ACE寫在最后面;同時需在其它靜態(tài)庫工程Android.mk文件中同時添加__ACE_INLINE__宏定義,否則在*.so鏈接時會報鏈接錯誤,導致最終生成失敗。

網站欄目:Android下使用ACE開源網絡庫
文章位置:http://bm7419.com/article14/pcicge.html

成都網站建設公司_創(chuàng)新互聯,為您提供域名注冊、ChatGPT、企業(yè)建站、自適應網站網站設計、網站策劃

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

微信小程序開發(fā)