freerdp的android客戶端現在已經可以通過網關了,而且添加了RemoteApp的功能,編譯步驟比較繁雜,對於以後的開發,十分有幫助,如果有什麼問題,歡迎交流
工具/原料
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
導入這3個項目
設置三個項目需要的lib,其時這裡只有aFreeRDP,FreeRDPCore需要設置lib
設置三者項目的依賴
在項目aFreeRDP上面右鍵選中運行,生成apk文件
測試
android4.0
令人欣慰的是,afreerdp可以設置網關,並啟動RemoteApp
注意事項
第7步是最複雜的部分,大部分是因為依賴的關係,才會出現的錯誤,需要設置環境變量
SDK,NDK的環境變量一定得設置好