termux是一个功能很强大的命令行工具.唯一的不足之处就是.它不启动,通过它安装的一些服务就无法启动.
手动启动termux后,如果安装的服务多.还得手动敲命令去启动.比较麻烦.
从F-droid下载的版本,按照教程操作,不知道为什么.也实现不了打开termux后就启动已安装的服务的功能.有人说需要下载收费版的.反正我是不知道在哪下载收费版.
通过查看github上termux:boot的源码.发现termux:boot是通过intent方式启动一个termux的服务.那通过autojs去启动应该也是一样的效果.除非它进行验证......不过,并没有验证...
那下面通过两种方式来启动termux的服务.一种是root方法.另一种是免root方法
root的方法.比较简单.就是一条shell命令
需要注意的是,-d传递的 scheme中, 文件路径只允许修改末尾的文件名.
shell("am startservice -n com.termux/.app.TermuxService "+
"-a com.termux.service_execute "+
//-d参数中需要修改你自己的文件名.你只能修改文件路径结尾的文件名称.不得变更路径
"-d com.termux.file:/data/data/com.termux/files/home/.termux/boot/bootsshd "+
"-e com.termux.execute.background true", true);
以上的一条shell命令可以说是termux:boot使用的核心命令.你可以修改做成变种,启动多个boot下的文件,但是启动脚本的路径/data/data/com.termux/files/home/.termux/boot/
不允许改变
免root的方式 测试需要root权限
免root方式就比较麻烦一点.
需要修改termux的AndroidManifest.xml文件.
使用MT管理器.查看termux的包,然后反编译方式打开androidManifest.xml. 跳转到129行
具体内容是:
<service
android:name="com.termux.app.TermuxService"
android:exported="false" />
将exported的值改为true
<service
android:name="com.termux.app.TermuxService"
android:exported="true" />
这里修改完成后.会生成一个新的apk包.这个包不能直接安装.需要重新签名或者去除签名.
MT管理器可以去除签名或者重新签名
搞定签名后,再安装即可.
安装好以后.使用下面的脚本.运行
importPackage(android.content);
importClass(android.net.Uri);
const TERMUX_SERVICE = "com.termux.app.TermuxService";
const ACTION_EXECUTE = "com.termux.service_execute";
const EXTRA_EXECUTE_IN_BACKGROUND = "com.termux.execute.background";
const BOOT_SCRIPT_PATH = "/data/data/com.termux/files/home/.termux/boot/services";
app.startActivity({
packageName : "com.termux",
className : "com.termux.app.TermuxActivity"
});
waitForActivity("com.termux.app.TermuxActivity");
var scriptUri = new Uri.Builder().scheme("com.termux.file").path(BOOT_SCRIPT_PATH).build();
var executeIntent = new Intent(ACTION_EXECUTE, scriptUri);
executeIntent.setClassName("com.termux", TERMUX_SERVICE);
executeIntent.putExtra(EXTRA_EXECUTE_IN_BACKGROUND, true);
context.startService(executeIntent);
★注意:
同样的 BOOT_SCRIPT_PATH 这个变量的值只允许修改最后一个文件的文件名.
也就是说.以上两种方法.都不可以修改启动脚本存放的路径.
- 一个示例
假如我们在打开termux的时候,希望启动sshd这个服务.
#首先安装openssh
$ pkg install openssh
#然后在家目录中创建文件夹
$ mkdir -p $HOME/.termux/boot
#创建启动服务的脚本文件
$ touch $HOME/.termux/boot/services
#将要启动的服务写入脚本文件
$ echo sshd >> $HOME/.termux/boot/services
以上的步骤执行完成后关闭termux.然后使用刚才的脚本来启动termux.
使用命令来验证一下.
#检查服务
$ ps -a |grep sshd
4855 u0_a141 0:00 sshd
4868 u0_a141 0:00 /data/data/com.termux/files/usr/bin/sshd -R
5220 u0_a141 0:00 grep sshd
#检查端口 如果状态为 LISTEN 则说明8022端口已经打开
$ netstat -atn |grep 8022
tcp 0 0 0.0.0.0:8022 0.0.0.0:* LISTEN
或者使用nmap来扫描一下自己的端口.看看8022是否开启
$ nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-07 14:01 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0013s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
8022/tcp open oa-system
好了 以上便是使用Autojs来替代termux:boot插件教程. 如果你想启动多个脚本文件.注意编写脚本的逻辑.
1.先启动termux
2.再启动boot/目录下的脚本