腾讯云函数配置ADB指令操作

最近因为业务需求,简单地接触了一下腾讯云函数 SCF。

这边使用的是Python函数,因此后续都将以python来解释。

根据官方的文档介绍。

  • 云函数:以函数为扩展单位,虚拟化运行时环境(Runtime)。是现有计算资源的最小单位,具有完全自动、一键部署、高度可扩展等特点,是轻量级服务部署非常好的选择。

不过实际上运行起来,有点像是一个定制化的虚拟容器中监听这样一个函数,通过命令可以看到操作系统应该是定制化的centos。

云函数和容器的不同在于限制太多,其中有几个限制点。

1. 云函数应该只会部署当前文件夹,并且创建一个新环境。因此需要安装的依赖必须要安装在同脚本函数同一文件夹下。要么需要通过网络拉取(比如python需要使用Pip拉),或者从cos下载,或者通过文件夹和zip包上传。如果依赖安装在其他文件夹下,那么便无法生效。

2. 目前发现只有tmp文件夹能够进行读写操作。之所以叫做tmp,就是临时文件夹,每次调用的时候都会被重置,并不是第一次调用后写在里面的文件在下次调用还在。

当我要使用ADB时,我要使用的应该是 https://dl.google.com/android/repository/platform-tools_r31.0.3-linux.zip

那么,这个文件夹该怎么用起来呢?

1. 需要将整个platform-tools上传到云函数端

2. 需要给platform-tools/adb 赋权

3. 需要用命令行调用adb指令

针对这三个问题,分别需要这么处理:

1. 这点简单,可以通过zip或者文件夹上传的方式将文件上传。 也可以先将整个Platform-tools上传到cos,然后通过代码从cos拉取。

2. 这点比较复杂,讲道理,除了tmp文件夹中的内容,都是只读文件,甚至无法修改权限。于是结合第一点,只能曲线调用。要么每次从脚本目录里将Platform-tools文件夹复制到/tmp文件夹下再赋权,要么每次先通过代码从cos拉取整个文件夹到/tmp文件夹中。

3. 这个问题比较麻烦。当完成前面两个问题的时候,发现调用adb的时候竟然要读写/home/qcloud目录下的内容。但是在云函数里,该目录只能读不能写。大概在这个时候,只能放弃了把。当我们看了看adb开源里的内容中和云函数的log时,发现就是因为在Home目录下的ssh写入失败了。

开源文件

腾讯云函数配置ADB指令操作_第1张图片 

 这时候有点希望了。Home目录之所以是"/home/qcloud" 是因为在开发文档中明确写好了,

HOME /home/qcloud

云函数 环境变量 - 开发指南 - 文档中心 - 腾讯云

因此,我们只需要将环境变量改成可读可写的tmp文件夹就行了。

额外的骚操作:

        通过上面的做法,只需要直接访问 /tmp/platform-tools/adb 就可以直接调用adb,但是总是有些SB想直接输入adb三个字,不想直接指定具体目录。没办法,作为一个打工人总是得满足他们的要求的。

        如何通过指令直接调用应用呢?

        建立软连接?这个没办法,毕竟所有的文件夹都没有写权限,没法操作。

        再次修改PATH路径?但是在云函数的环境变量设定上,无法修改PATH的环境变量。

        在代码里,执行cmd,将adb的路径export 到PATH中。但是具体操作的时候,运行的命令行里连export指令都没有,因此该方法也失败了。毕竟如果什么东西都export上去说不定会造成什么漏洞对物理服务器有所损害。

        最后,还是找到了个方法。直接使用python的库,os.environ["PATH"]直接设定路径到adb的路径下,这样就能直接调用了。(当然这个方法也不保险。可能过阵子就被封了。但是还是希望官方能够给点正经方法)

        

你可能感兴趣的:(ADB系列,腾讯云,云计算,云函数,adb)