freerdp的android客戶端編譯?

Tags: 客戶端, 編譯,

freerdp的android客戶端現在已經可以通過網關了,而且添加了RemoteApp的功能,編譯步驟比較繁雜,對於以後的開發,十分有幫助,如果有什麼問題,歡迎交流

freerdp的android客戶端編譯

freerdp的android客戶端編譯

工具/原料

Cmake version>=2.8

SDK version>=21

NDK version>=r9

Android-external-openssl-ndk-static

Adt-bundle-linux-x86_64

方法/步驟

下載,編譯,安裝cmake

wget ...(不讓輸入,自己搜資源吧)

解壓

tar zxvf cmake-3.0.2.tar.gz

cd cmake-3.0.2

編譯 安裝

./configure –prefix=/usr/local/cmake

gmake

su – (需要root權限)

make && make install

添加cmake的環境變量

export PATH=$PATH:/usr/local/cmake/bin

下載,編譯,安裝 openssl (安裝之前檢測系統是否已經安裝openssl,安裝了就不要再安裝了)

wget ...(不讓輸入,自己搜資源吧)

解壓

tar xvf openssl-1.0.1j.tar.gz

編譯 安裝

cd openssl-1.0.1j.tar.gz

./config (可能是 ./configure 視情況而定)

make && make install (su – 需要root權限)

添加環境變量

export OPENSSL_ROOT_DIR=/usr/local/ssl

export OPENSSL_LIBRARIES=/usr/local/ssl/lib

export OPENSSL_INCLUDE_DIR=/usr/local/ssl/include

PATH=$OPENSSL_ROOT_DIR/bin:$OPENSSL_LIBRARIES:$OPENSSL_INCLUDE_DIR:$PATH

export PATH

下載並設置SDK的環境變量 (免安裝,直接解壓到/usr/local)

export ANDROID_HOME=/usr/local/sdk

export ANDROID_SDK=/usr/local/sdk

export PATH=$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools:$PATH

下載並設置NDK的環境變量 (免安裝,直接解壓到/usr/local)

export NDK=/usr/local/ndk

export ANDROID_NDK=$NDK

export PATH=$PATH:$ANDROID_NDK

下載Android-external-openssl-ndk-static 並編譯(NDK已經安裝並且設置好環境變量)

進入Android-external-openssl-ndk-static 目錄,輸入一下命令進行編譯

ndk-build

如果在此目錄下生成libs說明編譯完成。

下載Adt-bundle-linux-x86_64-20140702(免安裝)並解壓,生成快捷文件

ln –s /usr/local/eclipse/eclipse /root/Desktop/eclipse

FreeRDP下載編譯生成eclispe下的android工程

下載freeRDP

wget (不讓輸入,自己搜資源吧)

解壓

tar xvf FreeRDP-master

cd FreeRDP-master

下面簡單說說編譯的過程。這個是需要用到cmake來編譯

資料參考(;tid=195853,注:這個已經是老版本的編譯教程。新版本有一些不同)

可以看一下docs裡的README.android文件。這裡面詳細的描述瞭如何編譯android的客戶端。大概有三種方法。

1)直接用cmake編譯出apk文件。

2)用cmake編譯出ant腳本,然後用ant命令來編譯apk。

3)用cmake只編譯libfreerdp-android.so。然後導入eclipse中來生產apk。

實際開發中用第三種比較多。一般都是改動jni代碼後手動編譯so庫然後使用eclipse來調試java代碼。

因為android版本的rdp協議都是基於freerdp的代碼的。而freerdp需要以來openssl庫。所以首先需要編譯android-external-openssl-ndk-static。下載地址https://github.com/bmiklautz/android-external-openssl-ndk-static(前面已經編譯)

這個是一個ndk的工程。需要Android NDK (>= r9),下載完後配置好ndk的環境變量。進入cd android-external-openssl-ndk-static,然後ndk-build,編譯完生成靜態庫。如下圖: 3.然後是在freerdp的根目錄使用android的keychain來編譯整個項目生成so動態庫。根據文檔終提供的編譯命令如下: cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchainNaNake \ -DANDROID_NDK="_your_ndk_path_here_" \ -DFREERDP_ANDROID_EXTERNAL_SSL_PATH="_your_ssl_build_root_path_" \ -DANDROID_BUILD_JAVA=OFF "_your_ndk_path_here_"就是你的ndk的路徑,寫絕對路徑。 "_your_ssl_build_root_path_"這個就是第3步裡編譯出來的android-external-openssl-ndk-static的路徑, 最後環境下替換後的編譯命令如下:

cmake -DCMAKE_TOOLCHAIN_FILE=cmake/AndroidToolchainNaNake -DCMAKE_BUILD_TYPE=Debug -DPKG_CONFIG_EXECUTABLE="/usr/local/pkgconfig/bin" -DANDROID_NDK="/usr/local/ndk" -DFREERDP_EXTERNAL_SSL_PATH="/usr/local/android-external-openssl-ndk-static" -DANDROID_BUILD_JAVA=OFF –L

(PKG_CONFIG_EXECUTABLE參數 防止缺少PKG_CONFIG_EXECUTABLE的錯誤) 執行完後會生成config文件,接著輸入make開始編譯。編譯後會在FreeRDP/client/Android/libs/armeabi-v7a目錄下生成libfreerdp-android.so動態庫。

到此就生成了Android的工程項目,現在完成了整個編譯的一大半,這部分也是最容易出現問題的部分,只要這部分,沒有錯誤的編譯完成,基本上導入eclipse(bundle adt)就能生成我們想要的apk。

Eclipse-bundle編譯freerdp的android項目

首先說一下,Eclispe-bundle對於沒開發過android,可能很陌生。這個版本就是指的是eclipse + adt 綁定的版本,當然也可以使用eclispe然後自己配置adt,效果是一樣的。(提示Eclipse-bundle是免安裝的,使用前提是已經安裝了JDK,SDK,NDK,NDK在本項目中是需要的,一般情況下是不需要的,並設置好環境變量)

在上一環節在client/android目錄線面會生成3個項目,分別是aFreeRDP,appcompat_v7, FreeRDPCore

freerdp的android客戶端編譯

導入這3個項目

freerdp的android客戶端編譯

freerdp的android客戶端編譯

freerdp的android客戶端編譯

設置三個項目需要的lib,其時這裡只有aFreeRDP,FreeRDPCore需要設置lib

freerdp的android客戶端編譯

freerdp的android客戶端編譯

設置三者項目的依賴

freerdp的android客戶端編譯

freerdp的android客戶端編譯

在項目aFreeRDP上面右鍵選中運行,生成apk文件

freerdp的android客戶端編譯

測試

android4.0

令人欣慰的是,afreerdp可以設置網關,並啟動RemoteApp

freerdp的android客戶端編譯

freerdp的android客戶端編譯

注意事項

第7步是最複雜的部分,大部分是因為依賴的關係,才會出現的錯誤,需要設置環境變量

SDK,NDK的環境變量一定得設置好

相關問題答案