修复Termux:API不能使用(无图标打不开)

0x1.前言

简单来说我的方法就是将termux和termuxapi用源码自己重新编译打包一次。

此方法仅在我手机上测试成功,不能保证其他手机也能成功,需自己测试。

1.注意事项

  • 1.使用此方法前,务必要看清楚1.问题定位所描述的问题说明,若不是此情况则原因可能不同,需谨慎实验我的方法。
  • 2.尝试此方法前务必要保存好数据。

0x2.运行环境

  • 手机型号:vivo T2x
  • 操作系统:OriginOS
  • 安卓版本:Android 12
  • termux-app:原0.115.0,改后变为github-master最新版(2ac7fd1e565872d10b91157022485c13ab179524)
  • termux-api:原v0.50.1,改后变为github-master最新版(2c6674f93f5e5cbf6128a0119afc2097dc22f6e7)

0x3.解决过程

1.问题定位

首先按理说我的termux和termux-api都是从F-Droid中下载安装的:

  • Termux:https://f-droid.org/packages/com.termux/
  • Termux:API:https://f-droid.org/packages/com.termux.api/

按理说应该不应该出现问题的,开始安装好的时候确实也能用,但是前一段时间突然就不能使用了,无论执行什么termuxapi相关的指令都是挂起,而启动命令:termux-api-start,则是反馈没有找到服务。

经过寻找发现也可能是这篇文章提到的问题【csdn】:android开机启动Service(小发现)

其中提到:

最近在做一个关于Android系统上的监控程序,开机启动,开机启动代码是网上找的,也就是注册一个广播和Activity,然后用Activity启动Service就可以了,但是我想让这个程序没有界面,而且在桌面没有图标显示,然后我想当然的用Service来代替开机启动Activity,然后就出现了很诡异的事情:因为我第一次是用Activity唤醒的Service,发现启动的相当顺利,然后我把Activity直接注释掉,用eclipse的run as重新运安装,改用广播唤醒Sevice,开机之后Service程序也能顺利的执行,但是如果先卸载Android程序再安装注释了Activity的程序的话,Service是不会被广播启动的,在网上找了答案,原因是android系统版本的原因,说android4.0之后广播机制改了,从来没有运行过的Android程序是不能接收任何广播的。这句话我没法在4.0之前的手机上验证,但是我已经确定我的Androd4.0.3版本如果没有运行过的话,是不会收到开机广播的。

Activity是有界面的,而Service则是无界面。

我突然想到之前下载安装好Termux:API的时候好像见到过这个界面:

请添加图片描述

这便是第一次打开Termux:API时出现的界面,但现在找不到了Termux:API的图标了,无论怎么卸载后重新安装都没有这个界面,安装好之后“打开”按钮是灰色的,也就是不能打开。

所以问题很可能是出现在Termux:API没有图标,无法第一次打开,所以才打不开它的Service服务,因为只有成功打开一次的应用才能使用Service。

我又去翻了下Termux:API的源码,发现人家确实是有Activity的,但不知为何我下载安装F-Droid的Termux:API安装怎么都没有了,也无法打开Termux:API。

我的问题就是这样,如果你的Termux:API在桌面上有图标,而且可以打开上图那个界面,那么问题可能就不出在这里,此时我建议你用logcat自己检查一下,然后看下是不是这些原因:

  • Termux和Termux:API的签名需要一致,也就是说两者都需要从同一个应用商店下载安装,都需要在F-Droid下载安装。不行就重新下载安装一下试试;
  • 权限没有打开,除了应用设置的权限外还应该去电池管理把电池权限打开,并将自启动、关联启动等等权限均打开;

2.android:sharedUserId

照前面的分析,虽然不知道为什么F-Droid下载的Termux:API没有图标,但只要我能找到一个有界面的Termux:API安装好我的问题不就解决了吗?

网上没有其他Termux:API那我就自己打包个好了,反正是开源的,结果我打包之后打开程序,确实就有图标而且有界面了,但是仅仅这样不行。

因为Shared User id,Termux:API中有一个这样的属性android:sharedUserId,它的作用就是使不同的应用可以互相访问任意数据,必要时还能在同一个进程运行。

相关的它的参考可见【csdn】:Android权限之sharedUserId和签名

所以正是有了这个的存在Termux和Termux:API才可以相互通信,没有这个的话,即使所有的Service都设置为android:exported=true也不能成功通信,logcat中会找到报错:

java.lang.SecurityException: Permission Denial: getIntentSender() from pid=1484, uid=10151, (need uid=1000) is not allowed to send as package android

而shareUserId要求两个应用的签名需要一致,不然则会在安装时报错:

Package com.termux.api has no signatures that match those in shared user com.termux

因为F-Droid中下载的Termux和Termux:API都是平台负责编译打包的,它的签名我们也不可能伪造的,这就意味着,如果你想要重新编译Termux:API,并且让它起作用,只编译Termux:API是不够的,你还需要同时编译Termux,两者都用另外一个签名这才能使它们起作用。

3.编译打包

编译打包因为有源码,所以我们只需要下载打包一下即可。

但编译打包毕竟略显麻烦而且有一定门槛,如果想省事就直接下载安装我这次打包好的两个应用吧,这样就不需要下面的子步骤了,直接跳到下一步,但我也不确定你的手机是否能用:https://www.aliyundrive.com/s/RvhvX4Hox6q 提取码: 2333

若是想自己打包需要一定基础,中途遇到问题就问下百度。

1.环境准备

首选Android Studio需要有,这个直接在官网上下载安装,免费的:

https://developer.android.google.cn/studio

然后需要下载下来Termux:API和Termux的源码,位于github:

  • Termux:https://github.com/termux/termux-app
  • Termux:API:https://github.com/termux/termux-api

我这里直接选了最新版,具体什么版本见上面0x2.运行环境

2.导入项目

分别导入Android Studio两个项目,就直接将文件夹拖入Android Studio中然后选择

导入后你可能需要添加镜像源,不然下载的很慢,将build.gradle或settings.gradle文件的仓库源repositories,添加如下镜像,这样才能下载变快:

        maven { url "https://jitpack.io" }
        maven { url 'https://maven.aliyun.com/repository/releases' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/public' }

但仅此在打包Termux的时候还可能会失败,因为它要从github上下载文件,遇到Socket Timeout这种错误就是网络问题了,此时你需要加代理,见【百度知道】:Android Studio如何设置代理?

3.编译打包

导入好之后什么源码都不用改,直接打包即可。

第一次编译打包还需要自己生成一个key进行签名,见【csdn】:Android Studio打包生成APK

4.备份Termux和恢复

在安装前你可能想备份一下原来的Termux,毕竟什么设置软件包都下载安装好了,备份好之后重新安装一恢复即可用,可见【csdn】:Termux的备份和恢复

5.安装应用与开启权限

最后下载安装好后Termux:API应该已经有图标并且能打开上图那个界面了,这说明我们打包了半天没白费劲。

但此时你还不能直接用,首先你需要打开Termux和Termux:API的各项权限,自启动、关联启动什么的都得打开,还要进电池的设置将两者允许后台高耗电,我手机里通知栏还需要额外设置Termux:API允许通知。

其次你需要在Termux中安装好termux-api包,如果你上一步备份恢复过原来的自然是不用,没有这个包的话你是不能运行命令的,这样安装:

pkg install termux-api

这3步都完成之后你再运行termux-api-start命令应该就没有那个讨厌的not Found Service了。

0x4.结语

本教程仅供学习交流,不承担任何责任。

对于本文中的内容,请谨慎辨别,不一定是完全正确的。

主要是自己试了成功了,网上找了各种内容也不能解决这个问题,所以就发出来看能不能帮到和我遇到同样问题的人。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值