ANDROID 開機啟動VNC SERVER


ANDROID 開機啟動VNC SERVER

背景信息:

   最近在做一個項目,在項目需求中有這么一項“要把VNC SERVER 添加到android里並讓其開機自啟動”。其實做這個項目也挺縛手縛腳的,因為軟硬件技術都要去求人,所以就四處去找方案公司幫我們做這個項目,他們都不願意幫我們做,其原因之一就是上述所說的需求---VNC SERVER(我都把VNC源碼和參考資料都發給他們)。

   我就想啦。。。真的有這么難么!!然后我就用我現有的資源(我公司自撐握的核心)通過網上查找資料和看書(艱苦的過程)去現實了這個讓別的方案公司聞風喪膽的ANDROID VNC SERVER。

具體步驟和所遇難題

1、         VNC源碼

https://github.com/oNaiPs/droid-VNC-server在這個網頁可以下載VNC SERVER 源碼

2、         VNC SERVER編譯

參考上述網頁(包含有VNC SERVER編譯方法)

 

The droid-VNC-server projects consists in three main modules parts: the daemon, wrapper libs and the GUI.

 

- Daemon -

Provides the vnc server functionality, injects input/touch events, clipboard management, etc

Available in jni/ folder

 

- Wrapper libs -

Compiled against the AOSP so everyone can build the daemon/GUI without having to fetch +2GB files.

Currently there are 2 wrappers, gralloc and flinger.

 

Available in nativeMethods/ folder, and precompiled libs in nativeMethods/lib/

 

- GUI -

GUI handles user-friendly control.

Connects to the daemon using local IPC.

 

-------------- Compile C daemon ---------------------

On project folder:

  $ ndk-build

  $ ./updateExecsAndLibs.sh

 

-------------- Compile Wrapper libs -----------------

  $ cd <aosp_folder>

  $ . build/envsetup.sh

  $ lunch

  $ ln -s <droid-vnc-folder>/nativeMethods/ external/

 

To build:

  $ cd external/nativeMethods

  $ mm .

  $ cd <droid-vnc-folder>

  $ ./updateExecsAndLibs.sh

 

-------------- Compile GUI------- -------------------

Import using eclipse as a regular Android project

3、         找NDK過程

在我ANDROID源碼的ndk/下執行ndk-build,發現編譯不過(估計是編譯不完全,缺少某些工具)搞了好久都沒有搞定。然后換一個思路,在網上找一個現成的NDK開發源碼。到網頁http://developer.android.com/tools/sdk/ndk/index.html下載android-ndk-r9b-linux-x86_64.tar.tar

 

4、         VNC 編譯中所遇到的難題

在VNC源碼目錄下執行上述所說的NDK源碼中的ndk-build,

 

出現上述錯誤,解決方法是:

修改報錯的文件/jni/jpeg/jidctfst.S文件。將里面出現的三個PLD行里的圓括號改成方括號。如下:

vnc server">
vnc server">
vnc server">

 

編譯完成后會在<vnc server>/libs/下生成ANDROID,MIPS,X86平台下的本地可執行文件androidvncserver(十分重要).

在VNC源碼目錄下執行./updateExecsAndLibs.sh

 

5-------------- Compile Wrapper libs -----------------

$ cd <aosp_folder>(ANDROID源碼目錄)

  $ . build/envsetup.sh

  $ lunch

  $ ln -s <droid-vnc-folder>/nativeMethods/ external/

$ cd external/nativeMethods

  $ mm .

出現以下錯誤

 

其中有一個頭文件沒找到,又在網上找答案,找了好久都沒有找到,最后打開flinger.cpp一看,發現了條重要線索。如下:

 

包含的是ANDROID庫內的頭文件,並非自定義頭文件。最后在ANDROID源碼目錄下執行以下命令

find ./ -name ISurfaceComposer.h 得出以下結果

 

這么一看就知道結果同時也通過這一點讓我了解到了NDK開發的頭文件的路徑是<android source>/frameworks/native/include,原來ANDROID和VNC的頭文件的包含路徑不對應,修改VNC中的flinger.cpp文件改正如下

 

-----------------------------------------------------------

改正后再次編譯 mm .

會出現如下錯誤:

 

關於這個錯誤,估計是我的ANDROID源碼不能兼容,我的解決方法是:

1、          首先要找到這個結構體framebuffer_device_t在哪里,在ANDROID源碼目錄下執行以下命令:

grep -rn "framebuffer_device_t" ./   得以下結果

 

framebuffer_device_t就在上圖所示的文件(<ANDROID>/hardware/libhardware/include/hardware/fb.h)中定義

2、          打開fb.h看這個結構體中的成員

其中有一個成員引起了我的高度注意,如下圖

 

再對照VNC源碼中的出錯的文件

 

其中的fbdev就是framebuffer_device_t型的結構體。

對照后發現VNC中的read和ANDROID源碼中的post函數參數和類型都一樣。

3、          把read 改成post.

最后再次編譯!OK!!

-----------------------------------------------------------

最后用ECLIPSE導入VNCSERVER工程生成APK(具體細節就不羅嗦啦)。

 

 

把VNC SERVER嵌入ANDROID

1、         把androidvncserver放到/system/bin/目錄下

2、         編輯init.rc文件,添加以下兩行

service androidvncserver /system/bin/androidvncserver

      class main

也可以droidVNCserver.apk打進固件里。

羅嗦完畢!!!!!!!!!!!!!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM