gulp-gulp connect root启动服务本机可以打开,局域网下手机怎么打不开

1.首先 创建 pakeage.json 文件(包依赖)
方法:npm init
2.安装gulp
全局nodejs工作目录输入cmd行命令
npm install -g gulp
npm install -g gulp-connect
本地项目工作目录输入cmd行命令
1. npm install gulp --sava-dev
2. npm install gulp-connect --save-dev
本地创建js文件,文件名:gulpfile
//引入插件
var gulp = require('gulp');
var connect = require('gulp-connect');
//使用connect启动一个Web服务器
gulp.task('webserver',function () {
connect.server({
livereload:true,
//运行Gulp时,默认的Task
gulp.task('default',['webserver']);
本地工作目录:
访问地址:localhost:端口
手机端需要本机造热点:然后输入本机IP地址:端口
以npm安装msbuild为例:
npm install msbuild:
会把msbuild包安装到node_modules目录中不会修改package.json之后运行npm install命令时,不会自动安装msbuild
npm install --save:
会把msbuild包安装到node_modules目录中会在package.json的dependencies属性下添加msbuild之后运行npm install命令时,会自动安装msbuild到node_modules目录中之后运行npm install --production或者注明NODE_ENV变量值为production时,会自动安装msbuild到node_modules目录中
npm install --save-dev:
会把msbuild包安装到node_modules目录中会在package.json的devDependencies属性下添加msbuild之后运行npm install命令时,会自动安装msbuild到node_modules目录中之后运行npm install --production或者注明NODE_ENV变量值为production时,不会自动安装msbuild到node_modules目录中
运行时需要用到的包使用--save,否则使用--save-dev。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:853次
排名:千里之外
原创:15篇
(11)(3)(1)adb connect 连接 Android 设备的相关问题 - 为程序员服务
adb connect 连接 Android 设备的相关问题
最近在公司参与了一个 Android 机顶盒 App 开发,因为设备接口和驱动等原因,不像 Android 手机那样能方便地直接通过 USB 进行调试,只能通过 adb connect 以 TCP / IP 协议通信。
首先让 IT 给机顶盒分配了一个内网 IP ,并和 PC 接入同一局域网,然后在 PC 端运行 adb connect 192.168.xxx.xxx ,很快就连上了,跟 USB 调试几乎没有区别。
正好手中的 MI 2A USB 接口出故障了,同样尝试用 adb connect 连接,却总是失败。
找到了原因:需要开启设备 adb 服务 tcp 端口监听。
可能机顶盒是方便调试,默认开启了,大多数设备需要手动开启。
如果手机上装了终端类 App ,可以直接跑命令行,我们先设置adb端口监听并重启 adb 服务,然后查看监听状态:
adb connect 使用的 tcpip 端口默认是 5555 ,也可以自定义。可以看到该端口已处于 LISTEN 状态。
然后在 PC 端运行 adb connect 192.168.xxx.xxx 发现可以连接了(如果前面自定义了端口,IP 后要指明该端口号)。
但是如何保证手机重启后自动让 adb 服务监听 tcp 5555 端口?首先想到了直接修改系统根目录下的 init.rc 文件:
直接在文件最后面添加上面的脚本,重启手机后再次查看端口监听状态,发现并没有达到预期效果,而且打开 init.rc 文件也发现已经被还原。
难道是脚本添加的位置不正确?很快发现该文件中果然有启动 adbd 的语句,将设置端口监听的脚本插入该位置:
重启后发现依然不行。好吧,对底层没有深入研究过,这种方式先搁置。
只有在应用层通过 Java Runtime 间接操作底层了:接收 BOOT_COMPLETED 广播后启动 Service 达到开机启动的目的。
BroadcastReceiver 的注册就不赘述了,只列出开启 adb 服务 tcpip 端口监听的代码:
public static int enableAdbTcpipListening(int port) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(&su&);
DataOutputStream dos = new DataOutputStream((OutputStream) process.getOutputStream());
dos.writeBytes(&setprop service.adb.tcp.port & + port + &\n&);
dos.flush();
dos.writeBytes(&stop adbd\n&);
dos.flush();
dos.writeBytes(&start adbd\n&);
dos.flush();
dos.writeBytes(&exit\n&);
dos.flush();
process.waitFor();
return process.exitValue();
现在已经能成功通过 adb connect 无线调试,但也会发现其中存在的安全隐患:
你可以很容易连接并监听同一局域网内的所有已开启 adbd 服务的 Android 设备,无需得到授权,对方甚至不会收到任何提示!
虽然绝大多数手机默认是关闭的,但很多机顶盒却是默认就打开的。
而且很多手机还装了豌豆荚之类的 APP ,能通过 wifi 在 PC 客户端上更新应用,实际上也是通过这种 adb 方式连接的。
这样如果你同时安装了 PC 和 Android 客户端,甚至使用过 wifi 连接操作,则很有可能手机 adb 服务就是开启的,这种情况下手机就是很危险的,就算你关闭了这类 APP ,可能后台服务仍然在运行。
事实上 Android 4.2.2 已经通过 USB Debug Whitelist 修补了该漏洞 (参见):
如果你直接使用 adb connect ,虽然显示连接成功,但是你会发现设备是未授权的:
adb connect 192.168.128.100
connected to 192.168.128.100:5555
adb devices
List of devices attached
.168.128.100:5555
unauthorized
你必须先通过 USB 连接 PC 和手机,手机会弹出一个 Dialog ,提示是否信任该 PC (将其 RSA 指纹加入手机的 USB Debug Whitelist ):
如果你的设备一开始就是 4.2.2 以上 ROM ,并且是第一次使用 USB 调试,当然没什么问题。
但如果你是从低版本 ROM 升级上来的(比如我的 MI 2A 就是最近一次更新才出现的这个授权问题),而且之前就已经开启并使用 USB 调试,需要先关闭 USB 调试再打开并重新连接,这样才会出现这个新的提示 PC RSA 指纹信息的 Dialog (换了电脑也会重新提示)。
4.2.2 以前是不会提示这个指纹信息的,而且只有在打开 USB 调试时提示,而不是区分 PC 设备。
最后,将 PC 端的 adb 也重启一下就 OK 了,尽情享受无线 Debug 的乐趣吧:
原文地址:, 感谢原作者分享。
您可能感兴趣的代码Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment: EndFragment:相信很多人在android 开发调试的时候会碰到这样一个问题,把手机和电脑通过USB连接上后两边都没有提示.重启手机和电脑还是有没有反应;只有充电的指示却没有USB连接的提示.这个时候你就会无法进行真机调试.你可以试试远程ADB调试的方法.其实启动远程ADB调试也很简单,只需要如下几个步骤就可以了.你的电脑需要和手机在同一个局域网内并且这个手机要通过wifii已正常连接.1.默认情况下ADB的连接方式为USB,所以需要更改ADB的连接方式.在你的手机上打开终端模拟器输入如下命令(命令行root权限下)&# setprop service.adb.tcp.port 5555上面的命令将adb的连接方式改为TCP方式并且在端口5555上进行监听.&重启手机上的ADB服务,继续在手机的终端模拟器输入如下两条命令&# stop adbd # start adbd上面两条命令将重启手机上的ADB服务.&然后在手机的终端模拟器上输入&# netcfg会出现如下结果:&lo & & & UP & &127.0.0.1 & & & 255.0.0.0 & & & 0xdummy0 & DOWN &0.0.0.0 &
& & & 0.0.0.0 & & & & 0xrmnet0
& DOWN &0.0.0.0 & & & & 0.0.0.0 & &
& & 0xrmnet1 & DOWN &0.0.0.0 & &
& & 0.0.0.0 & & & & 0xrmnet2 &
DOWN &0.0.0.0 & & & & 0.0.0.0 & & &
& 0xusb0 & & DOWN &0.0.0.0 & & &
& 0.0.0.0 & & & & 0xtunl0 & &DOWN
&0.0.0.0 & & & & 0.0.0.0 & & & &
0xsit0 & & DOWN &0.0.0.0 & & & &
0.0.0.0 & & & & 0xip6tnl0 &DOWN
&0.0.0.0 & & & & 0.0.0.0 & & & &
0xtiwlan0 &UP & &172.24.21.49&&
&255.255.255.0 & 0x172.24.21.49
这就是我手机的IP地址,当然每个人手机的IP地址可能会不同.手机上的操作已经完成,现在让我们打开电脑上的命令行cmd.exe(你的电脑必须已经安装了adb,
android sdk, eclipse android 开发环境)在命令行中输入如下命令:C:\Documents
and Settings\beifangying&adb connect 172.24.21.49:5555上面命令中172.24.21.49
就是我们在手机上通过netcfg看到的地址,而端口5555就是一开始设置的端口.这时会出现如下结果connected
to 172.24.21.49:5555表明你的电脑就连接成功了.你可以输入adb
devices 查看已经连接的设备.eclipse的DDMS中也会显示相关的设备进程信息.就像你通过USB 连接一样.C:\Documents
and Settings\beifangying&adb devicesList of devices
attached172.24.21.49:5555 & & & device&
阅读(...) 评论()使用Gulp配置Web开发服务器
构建工具 Gulp js最近正在变得越来越流行。我们可以用它做很多事,比如合并 Javascript 文件或者压缩图片。如果你还不了解 Gulp js。
构建工具 Gulp.js最近正在变得越来越流行。我们可以用它做很多事,比如合并 script 文件或者压缩图片。如果你还不了解 Gulp.js。
本文将向你介绍如何使用 Gulp.js 来作为本地 Web 服务器,而且内置了 livereload 支持。
从前的做法
假设我们需要开发一个单页的 web 应用。应用入口很简单,就是index.html文件。我们的目的是通过,以及localhost域名访问这个文件(某些情况下,通过file://协议访问不能满足需求)。在此之前,或许你会在本机安装一个Apache或者Nginx服务器。如果只是为了通过 HTTP 协议访问一些静态文件,现在以上这些都没必要了。
更好的办法
现在,由 Javascript 来实现的解决方案几乎无处不在,甚至是作为 web 服务器(都要感谢Node.js啊)。最流行的是一个叫做Connect的开源。我们将通过 Gulp.js 的一个插件gulp-connect来调用它(与 grunt-contrib-connect 一样,不过 Gulp.js 更容易)。
在接下来的章节中,我们要为我们的单页应用配置一个本地 web 服务器,我假设你已经有了其它基础配置,比如gulpfile.js文件。
初始化安装
首先,用下面的命令来安装 Connect 插件:
npminstall--save-dev gulp-connect
提示:npm install --save-dev可以简化为npm i -D.
接下来,为 web 服务器定义一个任务。gulpfile.js文件中的代码类似下面这样:
1 2 3 4 5 6 7 8vargulp = require('gulp'), connect = require('gulp-connect'); gulp.task('webserver',function() { connect.server(); }); gulp.task('default', ['webserver']);
这样就定义好了,只要在终端/命令行中执行gulp, 就可以启动 web 服务器。然后可以在浏览器中打开localhost:8080, 就能看到index.html的内容。这个简单的 web 服务器以当前gulpfile.js文件所在的文件夹作为网站根目录。服务器将一直运行,监听localhost:8080, 要停止服务器,可以回到终端/命令行下按Ctrl + C。(用过 Node.js, Grunt 或者
内置服务器的话,你一定对此非常熟悉。)
这个示例,以及接下来的所有示例的源代码可以在Github下载。每个例子的代码在一个单独的文件夹下,你需要在对应的文件夹下执行npm install命令来安装依赖项。
添加实时刷新( livereload ) 支持
设置基本的 web 服务器非常简单,接下来我们要继续完善它,首先要实现实时刷新。需要做两件事:
让 web 服务器带实时刷新支持启动
告诉组件什么时候应该自动刷新
第一步很简单,只要给connect.server()方法传入一个参数即可:
1 2 3 4 5gulp.task('webserver',function() { connect.server({ livereload:true }); });
第二步取决于你的项目的情况。在这个示例中(从Github下载示例代码,本例使用02-livereload),我们需要 Gulp.js 自动把 LESS 文件编译成
样式,并将其注入到浏览器。
先来分解一下这个例子:我们需要一个“监控器( watcher )”,它负责检查 LESS 文件是否发生变化。如果发生变化,它会通知 LESS 编译器把 LESS 文件编译为 CSS 文件,然后新的 CSS 文件通过实时刷新注入到页面。
为了编译 LESS 文件,需要用到gulp-less插件。你可以通过运行npm i -D gulp-less来安装 gulp-less 并在gulpfile.js文件中添加这个依赖项。watcher不用额外插件, Gulp.js 已经自带了。
我们的文件结构如以下所示:
. ├── node_modules │ └── ... ├── styles │ └── main.less ├── gulpfile.js ├── index.html └── package.json
在watch任务中,Gulp.js 监听styles目录下所有的 *.less 文件,一旦它们发生变化,就触发less任务。本例中,main.less是 LESS 的入口文件。每次编译完成后,结果会自动注入到浏览器。gulpfile.js的内容类似下面的实例,你可以复制粘贴到你的项目中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27// 定义依赖项 vargulp = require('gulp'), connect = require('gulp-connect'), less = require('gulp-less'); // 定义 webserver 任务 gulp.task('webserver',function() { connect.server({ livereload:true }); }); // 定义 less 任务 gulp.task('less',function() { gulp.src('styles/main.less') .pipe(less()) .pipe(gulp.dest('styles')) .pipe(connect.reload()); }); // 定义 watch 任务 gulp.task('watch',function() { gulp.watch('styles/*.less', ['less']); }) // 定义默认任务 gulp.task('default', ['less','webserver','watch']);
保存之后,回到终端/命令行,Ctrl+C停止服务器(如果它还处于运行状态),然后再次执行gulp启动服务器。打开浏览器,打开localhost:8080. 现在我们可以去 style 目录下的 LESS 文件做一点修改,并保存。你会看到 LESS 的修改被实时编译并自动同步生效到浏览器中的页面上。特别要说明的是,你不需要任何浏览器插件或者扩展。
请记住:前面的gulpfile.js只是一个为了演示如何使用 gulp.js 作为带有实时刷新支持的 web 服务器的精简示例。在实际项目中,建议配合其它的一些插件一起使用。你可以尝试着重新排列任务的顺序,或者尝试一下非内置的gulp-watch插件,这个插件可以让你只处理发生变化的文件。如果你的项目有大量的代码/文件,这个功能非常有用。在接下来的例子中,我会再演示另外的一种任务结构。
修改主机名和端口
gulp-connect 插件支持很多配置选项,前面我们只用到了livereload这一个。如果你需要修改 web 服务器监听的端口或者主机名,比如想通过http://gulp.dev来访问,你可以这样做:
1 2 3 4connect.server({ port: 80, host:'gulp.dev' });
为了能够通过gulp.dev域名以及默认的80端口来启动和访问,你需要:
在hosts文件中配置gulp.dev指向本机 IP 地址
没有其它程序占用80端口(比如 Apache, Nginx, QQ旋风,腾讯视频,迅雷等……)
root 或者 Administrator 权限(由于80端口是保留端口)
一些高级特性
你还可以继续深入探索 connect 插件的其它用法,比如同时启动多个 web 服务器。有时候这很必要,比如你需要运行一个开发服务器,同时执行集成测试等。
gulp-connect 也提供了一些额外的特性,比如用多个文件夹作为单个服务器的根目录。例如,你使用 CoffeeScript, 希望把编译的 Javascript 文件暂存在某个临时目录中,你可以把原本的项目根目录与该临时文件夹同时作为网站根目录。具体的实例可以在这里找到。
重构我们的代码
在前面的示例中,我们配置了一个“小巧玲珑”的gulpfile.js来完成把 LESS 文件编译成 CSS 并且自动注入浏览器的任务。它能用,但是还可以优化。由于我们把编译和实时刷新两个任务混合成了一个,有可能会导致问题。所以,接下来我们要把它们拆成单独的任务,然后只监控生成后的文件。为了达到这个目的,就需要用到刚才提到的 gulp-watch 插件。
既然要重构,那就再多做一点,我们顺便把 CoffeeScript 编译也添加进去。这样,新的目录结构会更加整洁。首先通过npm来安装需要的新插件:
npminstall--save-dev gulp-watchgulp-coffee
然后在gruntfile.js中加载。接下来的步骤,我假设你已经在scripts目录下创建了一些.coffee文件。这个示例的源文件在前面已经提到过的这个github repo中的03-livereload-refactored文件夹中。重构之后的gruntfile.js参见下面的代码,我们随后要一步一步地讲解这些代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37vargulp = require('gulp'), connect = require('gulp-connect'), watch = require('gulp-watch'), less = require('gulp-less'), coffee = require('gulp-coffee'); gulp.task('webserver',function() { connect.server({ livereload:true, root: ['.','.tmp'] }); }); gulp.task('livereload',function() { gulp.src(['.tmp/styles/*.css','.tmp/scripts/*.js']) .pipe(watch()) .pipe(connect.reload()); }); gulp.task('less',function() { gulp.src('styles/main.less') .pipe(less()) .pipe(gulp.dest('.tmp/styles')); }); gulp.task('coffee',function() { gulp.src('scripts/*.coffee') .pipe(coffee()) .pipe(gulp.dest('.tmp/scripts')); }); gulp.task('watch',function() { gulp.watch('styles/*.less', ['less']); gulp.watch('scripts/*.coffee', ['coffee']); }) gulp.task('default', ['less','coffee','webserver','livereload','watch']);
最大的变化是加入了单独的livereload任务。这个任务只负责监控(通过 gulp-watch 插件)编译后的文件的变化,并在浏览器中刷新它们。gulp-watch 自定义的watch()函数让我们可以只刷新变化的文件,而内置的gulp.watch()通常会刷新所有文件。
由于加入了一个额外的独立监控任务,编译步骤后面就不再需要.pipe(connect.reload())命令。这样我们就把任务根据它们的不同职能进行了划分,这是软件开发中经过实践验证的设计模式。
此外还应该注意到,编译后的文件不再保存在它们各自原先的源文件夹中,而是存储在.tmp临时文件夹中,这个文件夹的内容只有编译生成的文件,这样原来的样式和脚本文件夹就不再被生成的文件污染。这个文件夹还应该被排除在版本管理系统之外,比如svn-ignore属性和.gitignore文件。但是为了在开发过程中能够进行测试,需要把 .tmp 也作为网站根目录,在webserver任务中,完成这个工作的任务是下面这行代码:
root: ['.','.tmp']
经过重构之后,完成的工作虽然没有什么不同,但是相比之前,就变得更加清晰明了,而且便于扩展。
通过本文,你了解了如何 使用 Gulp.js 来作为 web 服务器。
你可以把这个与其它技术一起使用,比如测试,或者创建单页应用程序。需要提醒的是,这个 web 服务器只适合作为本机开发用途。生产环境你还是需要使用性能更好,更可靠的解决方案,比如 Nginx 或者 CDN.

我要回帖

更多关于 gulpconnectproxy 的文章

 

随机推荐