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打进固件里。
罗嗦完毕!!!!!!!!!!!!!!!!
ANDROID 开机启动VNC SERVER的更多相关文章
- android开机启动流程说明
android开机启动流程说明 第一步:启动linux 1.Bootloader 2.Kernel 第二步android系统启动:入口为init.rc(system\core\rootdir) 1./ ...
- Android开机启动Activity或者Service方法
本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...
- Android开机启动Activity或者Service方法(转载)
这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下 ...
- Xvfb新建虚拟X窗口,通过x11vnc启动VNC Server并转发Xvfb启动的虚拟窗口
远程运行Linux窗口程序使用X Windows太重量级了,可以使用Xvfb新建虚拟X窗口,通过x11vnc启动VNC Server并转发Xvfb启动的虚拟窗口. 1 2 3 4 5 6 7 8 yu ...
- Android开机启动程序
android程序实现开机启动的原理,简单点说就是做一个广播接收器,接收到开机广播时就启动activity或service或执行其它操作.Android系统在启动的时候会发出一个开机广播,内容为ACT ...
- Android 开机启动
创建一个Receiver,用来监听开机完毕: public class MyReceiver extends BroadcastReceiver { static final String actio ...
- Android 开机启动通知
效果图: 学习: 1.静态注册实现开机启动 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLET ...
- android开机启动应用和服务
注冊广播监听开机状态.启动应用和服务等: 监听开机的广播接收器: public class BootCompletedReceiver extends BroadcastReceiver{ @Over ...
- android开机启动过程
Android系统开机主要经历三个阶段: bootloader启动 Linux启动 Android启动 启动文件: 对于机器从通电到加载Linux系统一般需要三个文件:bootloader(引导文件) ...
随机推荐
- Linux下安装memcached图文版
所用到的工具: putty小软件 可以远程连接主机的小软件 然后在屏幕上输入用户名root 密码:******即可连接 由于安装这两个工具需要编译所以:第一步要进行安装编译: 习惯于将下载 ...
- 在Wince模拟器接入网络的方法
我第一次使用wince调用WCF服务的时候总是报错,找了半原因发现程序部署在模拟器中,而模拟器没有连接到网络,所以无法连接到WCF服务器. 以下是wince接入网络的方法: 1.点击模拟 ...
- Python 购物车---之商家部分
知识点:文件写入操作, 函数, 函数递归 #!C:\Program Files\Python35/bin # -*- conding:utf-8 -*- # author: Frank # 定义商品列 ...
- [HDU] 2094 产生冠军(拓扑排序+map)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2094 注意每组数据处理前,map要清空. #include<cstdio> #includ ...
- hex、bin、elf、axf文件区别
AXF和ELF axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面.在调试的时候,这些调试信息是不必下到RAM中去的,真正下到RA ...
- php将会话保存在数据库里
php默认把会话保存在临时文件中,保存在数据库中可以提高安全性,在共享主机服务器上,所有web站点都使用同一个临时目录,这意味着数十个程序都在同一位置进行文件读取的操作,我们很容易就编写一个脚本从这个 ...
- [bzoj1003][ZJOI2006][物流运输] (最短路+dp)
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- 平时的笔记02:处理fnmatch模块
# Copyright 2006 Joe Wreschnig## This program is free software; you can redistribute it and/or modif ...
- SpringMVC(二)——流程控制
SpringMVC主要就是用来做流程控制的,这篇博客总结一下如何在流程控制添加Interceptor(拦截器),如何将进行流程Mapping映射解析,如何编写Controller(控制器). 一,首先 ...
- LeetCode: Longest Consecutive Sequence [128]
[题目] Given an unsorted array of integers, find the length of the longest consecutive elements sequen ...