开发 APK 在澎湃 OS 上举步维艰。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tool2dx
0.32D
V2EX    Android

开发 APK 在澎湃 OS 上举步维艰。

  •  
  •   tool2dx 2024-11-13 10:57:52 +08:00 10935 次点击
    这是一个创建于 380 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想写一个后台定时服务代码,用来 10 分钟后自动熄灭小米平板屏幕的程序。

    在安卓模拟器和以前的 MIUI 系统上,运行完全没问题,一放到澎湃 OS 上,服务就老是被冻结。(以前 MIUI 内存不足是直接杀服务,由于设置了 START_STICKY ,5 秒钟后会被系统自动拉起来,包括安卓 14 模拟器也是走这个流程)

    查了一下,是一个 com.miui.powerkeeper 的进程干的好事。我用 ADB 设置了 RUN_ANY_IN_BACKGROUND allow, deviceidle whitelist +[应用的包名], 电池无优化,都会随机不定时被冻结,百思不得其解。

    而且如果调试程序 XML 里有后台隐私相关权限,比如 READ_CLIPBOARD_IN_BACKGROUND/GET_TASKS ,包名会被 com.miui.powerkeeper 拉黑,现象是无法弹出电池优化的按钮。解决方法是把权限去掉+换包名字。

    43 条回复    2024-12-14 18:27:31 +08:00
    magicls
        1
    magicls  
       2024-11-13 11:06:05 +08:00
    试试先正向,先在什么手机管家,安全管家里面,找找入口,把自己的应用加白名单。然后 recents 里面把自己锁定。另外请求一下忽略电池优化,把自己加白。

    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

    @RequiresApi(api = Build.VERSION_CODES.M)
    public void requestIgnoreBatteryOptimizations() {
    try {
    Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    这些都不行的话,再考虑 adb 那些骚操作。
    tool2dx
        3
    tool2dx  
    OP
       2024-11-13 11:10:41 +08:00
    @magicls 试过了,好像没用,我代码里有申请这个限。

    用的是这个代码,感觉和设置里的省电策略 = 无限制是一回事。

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName))
    {
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    ...
    }
    tool2dx
        4
    tool2dx  
    OP
       2024-11-13 11:12:34 +08:00
    @minami 我把 com.miui.powerkeeper 关掉后,运行很完美。但总觉得好奇葩,在要不要改自己代码和关闭 com.miui.powerkeeper 之间反复纠结。
    tsja
        5
    tsja  
       2024-11-13 11:12:37 +08:00
    不懂安卓开发, 要开发 App, 都要针对性适配每家的定制系统吗?
    tool2dx
        6
    tool2dx  
    OP
       2024-11-13 11:18:40 +08:00
    @tsja 自从澎湃 OS 需要 APP 备案后,应该有一个黑白名单列表给你的应用打分。分数越低,就越容易被后台冻结(我猜的)

    还是怀念以前的 MIUI ,没那么多限制。
    bkmi
        7
    bkmi  
       2024-11-13 11:19:47 +08:00
    这个真不能怪小米,你要保活服务就按照 Android 官方的规范来申请前台服务,或者试试 JobScheduler (我估计不行);
    READ_CLIPBOARD_IN_BACKGROUND 就只能怪 Google 垃圾,不给开发者一点余地,直接一刀切,我都是 Root 了用 Xposed 绕过。
    minami
        8
    minami  
       2024-11-13 11:21:11 +08:00   1
    @tool2dx #4 等你啥时候认识到小米的产品只配买来刷机,你就米粉入门了;等你啥时候认识到小米的产品买回来并不赚的时候,你就米粉毕业了
    minami
        9
    minami  
       2024-11-13 11:22:47 +08:00
    @bkmi 划重点,“包括安卓 14 模拟器也是走这个流程”
    bkmi
        10
    bkmi  
       2024-11-13 11:24:40 +08:00
    另外印象中 READ_CLIPBOARD_IN_BACKGROUND 这个权限只能系统应用申请,普通应用是无法申请的
    xloger
        11
    xloger  
       2024-11-13 11:39:55 +08:00
    如果用小米自带的“自动任务”来实现呢?靠它实现按规律唤起某个 App ,然后 App 再执行某些操作?
    lisongeee
        12
    lisongeee  
       2024-11-13 11:49:50 +08:00
    我以前在上面开发的时候,在后台新启动子线程 thread{} 里面的代码竟然不执行,需要把界面切到前台才会执行
    tool2dx
        13
    tool2dx  
    OP
       2024-11-13 11:50:04 +08:00
    @xloger 我是通过路由器调用 adb ,来远程启动小米平板上指定 service ,唤醒 APP 不是问题,保活是个难题。

    我已经准备改成在路由器定时 10 分钟,之后再调用 adb 指令了 -_-
    shily
        14
    shily  
       2024-11-13 11:55:10 +08:00
    没有提到 前台服务,开启前提服务也不行吗?
    https://developer.android.com/develop/background-work/services/foreground-services?hl=zh-cn
    JensenQian
        15
    JensenQian  
       2024-11-13 12:01:26 +08:00   2
    国内安卓不这么压,流氓软件,三 A 大作,塞虚幻引擎的聊天软件不然根本压不住啊
    只有流氓才能打败流氓
    reallittoma
        16
    reallittoma  
       2024-11-13 12:18:12 +08:00
    在 MIUI 上开发也难用,合理怀疑所有国产 UI 都难用。后来买了一台二手美版三星做开发机,舒服了。
    GotKiCry
        17
    GotKiCry  
       2024-11-13 12:21:39 +08:00
    @JensenQian 这你这么说不矛盾吗。现在厂商都是给虚幻聊天软件白名单
    anjingdexiaocai
        18
    anjingdexiaocai  
       2024-11-13 12:28:05 +08:00 via Android
    现在只有提高 app 的活跃等级才行,也就是让系统认为你是处于前台,目前合规的办法只有前台服务。
    JensenQian
        19
    JensenQian  
       2024-11-13 12:36:47 +08:00
    @GotKiCry 哈哈哈
    3A 聊天软件,还得开白名单
    dntilee
        20
    dntilee  
       2024-11-13 12:39:09 +08:00
    我在国内工作最开心的日子是在小米写系统应用的日子,不用担心任何权限
    CSGO
        21
    CSGO  
       2024-11-13 13:01:48 +08:00
    root 。取消白名单
    dupenn
        22
    dupenn  
       2024-11-13 13:10:07 +08:00
    @tool2dx #6 没有限制的话就全靠开发者自觉了,但是开发者会自觉吗?
    icestraw
        23
    icestraw  
       2024-11-13 13:12:12 +08:00   1
    感觉问题出在“操作系统功能”上,也就是关屏幕,这个权限理论上应该只有无障碍应用能操作。

    任何系统,写后台操作系统功能的代码,都不应该太容易,不然很容易就变成神仙打架。不然任何程序只要加一句你这个代码,就可以无限制保活,那生态也太乱了。
    bzkmsjy
        24
    bzkmsjy  
       2024-11-13 13:14:14 +08:00
    audiorelay 在澎湃上也无法保持后台,root 了也不知道有什么办法保活,酷安上我也发过帖,没找到办法
    tool2dx
        25
    tool2dx  
    OP
       2024-11-13 13:38:16 +08:00
    @icestraw 关屏幕是用户自己在设置里授权 APP 操作的,这个问题不大。后台其实安卓官方有提供电源管理选项,每一个 APP 设置都是可选的。小米的手机管家是二次封装,如果直接沿用谷歌的电池管理系统,就没有那么多麻烦事情了。
    109021017
        26
    109021017  
       2024-11-13 13:56:24 +08:00
    @shily 是啊, 不知道小米行不行, 但别的 Android 需要用 Foreground Services. 然后电池优化要关闭.
    icestraw
        27
    icestraw  
       2024-11-13 15:04:56 +08:00   3
    @tool2dx 关屏幕权限,从设计上看,理论上是应该控制“当你使用过程中”关屏幕,而不是“离开前台程序后”关屏幕。前者是 App 的正常操作,后者则是权限要求非常高的系统工具。对于国产 ROM 面对的恶劣安卓环境,策略严格一些感觉可以理解。

    其实 无障碍 这个权限 已经有些滥用了,现在百度啊甚至小红书都有声明这个权限,这些软件哪里会需要这个功能...不得不防啊
    lisxour
        28
    lisxour  
       2024-11-13 15:23:04 +08:00
    之前不是出过一个黑科技保活的嘛,试试?百度、github 现在应该还能搜到
    gmx1234
        29
    gmx1234  
       2024-11-13 15:27:18 +08:00
    @tool2dx 可以试试 Jetpack 中的 WorkManger
    Ruikoto
        30
    Ruikoto  
       2024-11-13 15:29:20 +08:00
    我使用世界迷雾(后台记录 GPS 位置)的时候也有保活问题,如果放在后台,记录出的轨迹就会断断续续,这个问题苦恼我好久了,不知作为用户是否有什么办法
    jarvay
        31
    jarvay  
       2024-11-13 16:10:52 +08:00
    https://github.com/Jarvay/workpaper-android
    这个是我写的定时换壁纸工具,用的是 29 楼说的 WorkManager ,service 设置成前台+省电策略无限制在澎湃上就能正常执行定时任务
    jarvay
        32
    jarvay      2024-11-13 16:19:49 +08:00
    @jarvay 搞错了,定时任务的话是闹钟
    wdv2ly
        33
    wdv2ly  
       2024-11-14 07:18:19 +08:00 via Android
    @reallittoma 哥们儿你这不是掩耳盗铃嘛?你开发舒服了,你的用户不舒服了哈哈
    behindeye
        34
    behindeye  
       2024-11-14 09:33:25 +08:00
    开启前台服务+开启悬浮窗权限+后台运行开启+电池优化+使用 WorkManager 试试
    okakuyang
        35
    okakuyang  
       2024-11-14 09:40:02 +08:00   1
    我说实话,你这个标题和你的内容有夸大的成分。你要开发一个能够熄屏的程序而且是在后台,这个已经大大超出一般 App 的职能范围。遇到坑也是可以预见的,省电管理程序,白名单已经是各家手机厂的基本操作,不存在小米一家这么做。如果我要做这功能我肯定首先要在更加简洁的固件上去开发。
    tool2dx
        36
    tool2dx  
    OP
       2024-11-14 09:52:32 +08:00
    @okakuyang 我有多个小米设备,自用手机还是 MIUI14 的,测试平板上是澎湃 OS 。前一个运行没问题,后一个厂家白名单,那我肯定是吐槽后者了。

    弄得我现在都不敢升级设备 OS 了。
    linlord
        37
    linlord  
       2024-11-14 10:51:39 +08:00
    @GotKiCry #17 该死的微信非得要自启动权限才能接到消息
    h1298841903
        38
    h1298841903  
       2024-11-14 11:30:31 +08:00
    @tsja 各家都有各家的 bug
    lucifer9
        39
    lucifer9  
       2024-11-15 09:29:46 +08:00
    小米的系统最离谱的是用户手动设置了允许自启动的应用
    系统隔一段时间会随机帮用户取消几个自启动权限
    要是说总数会有限制,起码明确写出来啊
    tyzandhr
        40
    tyzandhr  
       2024-11-15 20:17:33 +08:00 via Android
    设置前台服务并且显示通知了吗?现在 Android 规范里面就是只有前台服务能够保证一直运行。或者,你也可以用 WorkManager 。
    RikkaW
        41
    RikkaW  
       2024-11-16 18:21:30 +08:00
    READ_CLIPBOARD_IN_BACKGROUND 和 GET_TASKS 不是普通应用都用不了吗(
    reallittoma
        42
    reallittoma  
       2024-11-18 21:19:22 +08:00
    @wdv2ly #33 还好吧,我的用户主要是海外用户
    mtdhllf
        43
    mtdhllf  
       349 天前
    老老实实前台服务,大家都像你这样后台偷偷摸摸坑用户你觉得行嘛
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1538 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 16:25 PVG 00:25 LAX 08:25 JFK 11:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86