Error7401 / Lain
553 字
3 分钟
神必实践小工具
起因
很想实践一下之前看到的一个逆天项目
Waiting for api.github.com...
所以打算搓一个放博客上
原版是有一个页面的,我打算直接嵌入到博客里面,所以打算搞一个纯api版本的
实现
后端代码
感觉后端部分其实和计数模块挺像的
于是就从之前页面计数的api拿过来稍微改了一下
Waiting for api.github.com...
前端代码
然后就是前端,打算是塞在博客的侧边栏上面
所以用svelte搓了一个
<script lang="ts">
import I18nKey from '@i18n/i18nKey'
import { i18n } from '@i18n/translation'
import { onMount, onDestroy } from 'svelte'
let statu = $state("-1")
let prevstatu = $state("-1")
let difftime = $state(new Date(0))
let year = $state(0)
let months = $state(0)
let days = $state(0)
let hours = $state(0)
let minutes = $state(0)
let seconds = $state(0)
const refreshInterval = 1000
async function updatePageViews() {
if (import.meta.env.DEV) {
statu = "0"
console.log('DEV mode, status set to 0')
} else {
try {
const response = await fetch(
"https://api.kodatemitsuru.com/api/status",
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
)
if (!response.ok) {
statu = "0"
} else {
const { status, prevstatus, prevtime } = await response.json()
statu = status
if (status === "0") {
prevstatu = prevstatus
difftime = new Date(prevtime)
year = difftime.getFullYear() - 1970
months = difftime.getUTCMonth()
days = difftime.getUTCDate() - 1
hours = difftime.getUTCHours()
minutes = difftime.getUTCMinutes()
seconds = difftime.getUTCSeconds()
}
}
} catch (error) {
console.error('Error fetching status:', error)
statu = "0"
}
}
}
onMount(() => {
updatePageViews()
const intervalId = setInterval(updatePageViews, refreshInterval)
onDestroy(() => {
clearInterval(intervalId)
})
})
</script>
{#if statu === "-1"}
{i18n(I18nKey.status)}: {i18n(I18nKey.status1)}
{:else if statu === "0"}
{i18n(I18nKey.status)}: {i18n(I18nKey.status0)} <br>
{i18n(I18nKey.prevstatus)}: {prevstatu} <br>
{i18n(I18nKey.difftime)}:
{#if year > 0}{year} {i18n(I18nKey.year)} {/if}
{#if months > 0}{months} {i18n(I18nKey.month)} {/if}
{#if days > 0}{days} {i18n(I18nKey.day)} {/if}
{#if hours > 0}{hours} {i18n(I18nKey.hour)} {/if}
{#if minutes > 0}{minutes} {i18n(I18nKey.minute)} {/if}
{#if seconds > 0}{seconds} {i18n(I18nKey.second)} {/if}
{:else}
{i18n(I18nKey.status)}: {statu}
{/if}
手机通信
其实最重要的还是手机端,原本使用dumpsys是需要adb权限的,但是adb重启会掉,所以我从adb给了一个 android.permission.DUMP
然后从termux就可以使用dumpsys的(部分)功能,貌似走adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
是不行的,所以最后选择了dumpsys activity activities | grep topResumedActivity
然后剪掉一些多余的内容来获取当前的应用包名
问题
手上的小米14还不打算root,所以保活是个大问题 这个貌似没有特别好的方案,现在就是先拿一个CPU wakelock,然后device_config里面设一个device_config put activity_manager imperceptible_kill_exempt_packages com.termux
虽然还是会杀就是