V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honeycomb
V2EX  ›  Android

[改正]Android 7 正式版可能将于 8 月 22 日推送到亲儿子

  •  3
     
  •   honeycomb · 2016-08-19 01:07:42 +08:00 · 10396 次点击
    这是一个创建于 2801 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Huawei Nexus 6P August 22 Android N Update

    LG Nexus 5X August 22 Android N Update

    android central 有一条新闻,说 telus 的官方论坛表示 5x 和 6p 会收到 Android N 的更新 显然这个 Android N 肯定是 Android 7 的第一个正式版

    来源:

    http://www.androidcentral.com/android-70-nougat-likely-releasing-august-22

    http://forum.telus.com/t5/Mobility/Software-Update-Schedule/ta-p/53566

    对付那些喜欢非必要地占后台的可能不需要的软件(PUAs), Android 7 提供了一个很好的 AppOps OP 也就是

    RUN_IN_BACKGROUND
    

    打开 adb shell 然后输入:

    appops set [package name] RUN_IN_BACKGROUND ignore
    

    [package name]是应用的包名。 这么做会让隐式启动的 Service 无法运行,后台类型的 Service 也会在离开应用后几分钟内,被系统杀掉。大致在微信上测试了下,确实有效果。

    还有一个从 Android 6 开始就可使用的:

    appops set [package name] OP_READ_PHONE_STATE ignore
    

    可以解决那些拿不到电话权限便强退的 PUA 此外,电话权限对应了数个 OP 。

    OP_READ_PHONE_STATE
    

    只是其中一个,其它还有

    CALL_PHONE
    

    等。此外,有一个叫

    WAKE_LOCK
    

    的 OP 实际上是没有用的,只是做了审计,具体可以看 Android 的源代码

    前面那个帖子多次穿越,语无伦次,非常抱歉。

    49 条回复    2017-02-13 15:32:17 +08:00
    kitalphaj
        1
    kitalphaj  
       2016-08-19 07:46:53 +08:00
    不是说要等下一代 Nexus 出的时候才推送正式版么?
    BROWNURSIDAE
        2
    BROWNURSIDAE  
       2016-08-19 08:01:36 +08:00 via Android
    这样对微信会不会造成消息延迟???另外 wakelock 的想研究一下
    honeycomb
        3
    honeycomb  
    OP
       2016-08-19 08:13:36 +08:00 via Android
    @BROWNURSIDAE 微信的 service 被杀光了
    BROWNURSIDAE
        4
    BROWNURSIDAE  
       2016-08-19 08:27:49 +08:00 via Android
    @honeycomb 试了一下,在一定时间内 service 全无,推送也没了,微信的 gcm 是绑在 notifiy service 内吧,所以估计 gcm 推送也会没有?怎么恢复呢???
    terence4444
        5
    terence4444  
       2016-08-19 08:31:17 +08:00 via iPhone
    Adb... 放在界面上让用户设置就这么难… 唉…
    iPhone 7 取消 3.5mm 以后又让我摇摆了,结果 Android 还是这样子…
    Cavolo
        6
    Cavolo  
       2016-08-19 08:41:29 +08:00 via iPhone
    国内几家流氓大厂又回出新对策的
    yaoppp
        7
    yaoppp  
       2016-08-19 08:45:59 +08:00 via Android
    那么现在有哪个管理软件能在手机上完成上述操作呢?
    honeycomb
        8
    honeycomb  
    OP
       2016-08-19 08:52:12 +08:00 via Android
    @terence4444 它没打算让用户使用 appops
    honeycomb
        9
    honeycomb  
    OP
       2016-08-19 08:52:23 +08:00 via Android
    @yaoppp Appops xposed
    mozartgho
        10
    mozartgho  
       2016-08-19 09:02:42 +08:00
    @Cavolo 国内厂商根本不 care ,都是定制 ROM ,想怎么搞怎么搞
    l8mEQ331
        11
    l8mEQ331  
       2016-08-19 11:59:28 +08:00
    不知道三星多久可以推送,比较喜欢新加入的双击切换最近的两个 app 。
    fyooo
        12
    fyooo  
       2016-08-19 13:13:35 +08:00 via Android
    诶,几大厂的不提供通讯录就不让使用了,好无耻啊
    honeycomb
        13
    honeycomb  
    OP
       2016-08-19 13:24:55 +08:00 via Android
    @fyooo 用这个办法同样可以解决这种问题。

    因为设置成 ignore 实际上就是新权限机制对付旧版本应用程序的办法(返回 API 所要求的对象,但内容为空)
    toor00
        14
    toor00  
       2016-08-19 13:41:29 +08:00
    RUN_IN_BACKGROUND
    这个特性非常好啊,多谢楼主介绍
    在加上 改进的 doze 模式,看来这次谷歌是下决心要收紧了 或是为了推进 GCM?
    toor00
        15
    toor00  
       2016-08-19 13:43:33 +08:00
    @terence4444
    或者终端模拟器?不过手机上输入体验真的不好
    或是类似 my android tools 那样写个图形前端包装一下?
    honeycomb
        16
    honeycomb  
    OP
       2016-08-19 14:25:50 +08:00 via Android
    @toor00 最适合的可能是绿色守护之类的。
    出现这个 op 的原因可能是 Google 准备最终在 Android 里放弃隐式广播触发的启动和后台类型的 service (不包括前台 service 和被 bind 的 service )。

    Android 7 正式版仅是废掉了 connectivity_changed 等三个隐式广播触发的启动。

    这个 op 可能是给开发者一个禁用那些旧式自启动 /后台方案的测试环境
    fyooo
        17
    fyooo  
       2016-08-19 14:32:03 +08:00
    @honeycomb 哦,这样啊,有没有读取短信的 ignore ?这个感觉很重要
    fyooo
        18
    fyooo  
       2016-08-19 14:33:13 +08:00
    @toor00 对啊,有道理,如果有 app 可以帮忙做成图形化的设置就好了
    fyooo
        19
    fyooo  
       2016-08-19 14:46:48 +08:00
    @honeycomb 主要关心的还是短信权限,像银行验证码之类的是通过短信接收的,安卓的 app 只要是声明旧版本的 api 就可以绕过 android m 的限制未经允许就拥有读取短信的权限。

    而手动设置 app 的短信权限很容易忘掉,经常是突然看到别人推荐什么游戏, app 就装一下,但是没有想起来需要检查权限。
    honeycomb
        20
    honeycomb  
    OP
       2016-08-19 14:59:11 +08:00 via Android
    @fyooo 不会绕过的,只是因为兼容性的缘故,默认允许而已,只能手动修改。

    不需要用 appops 的,何况对于这类应用,把权限设为禁止等同于在 appops 把这个权限对应的所有 op 设置为 ignore 。
    honeycomb
        21
    honeycomb  
    OP
       2016-08-19 15:03:29 +08:00 via Android
    @fyooo 啊,你是希望让它能发短信但不能收 /查看短信数据库的内容?

    这样的话确实需要 appops 的细分设置了而且在 appops 设置好后,再到权限机制里允许短信权限( appops 和权限机制的设定部分是串联的,即在运行时权限机制部分放行整个短信权限,但在 appops 部分阻止短信权限的一部分)
    fyooo
        22
    fyooo  
       2016-08-19 15:12:59 +08:00
    @honeycomb 不是啦,可能刚才没有表达好。

    我是希望通过一些设置可以使得 android 可以跟 iOS 一样,除了默认的短信应用 messenger ,其他 app 一律默认没有读取短信,电话,通讯录的权限。
    fyooo
        23
    fyooo  
       2016-08-19 15:18:23 +08:00
    不过应该有批量处理的方法,比如

    1.用 adb shell 'pm list packages -3' 列出所有第三方的 app 的名字。
    2.adb shell dumpsys package PACKAGENAME |grep permission 枚举每一个 app 的权限
    3.如果有发现 app 滥用了,就 appops set [package name] OP_READ_PHONE_STATE ignore 教育它

    不知道有没有开源的项目做了上面的事情呢?有的话就不用造轮子了。
    fyooo
        24
    fyooo  
       2016-08-19 15:28:49 +08:00
    有趣的是发现没有限制读取短信的指令

    拿权限大户微信做试验: adb shell dumpsys package com.tencent.mm |grep permission
    返回
    runtime permissions:
    android.permission.READ_SMS: granted=true
    ...
    android.permission.READ_PHONE_STATE: granted=true
    ...

    然后
    $ adb shell appops set com.tencent.mm OP_READ_SMS ignore
    Error: Unknown operation string: OP_READ_SMS
    $ adb shell appops set com.tencent.mm OP_READ_PHONE_STATE ignore
    $

    结论:
    OP_READ_PHONE_STATE 成功,但是自己拼凑出来的指令 OP_READ_SMS 则失败。
    honeycomb
        25
    honeycomb  
    OP
       2016-08-19 15:29:59 +08:00 via Android
    @fyooo 确实值得为此做一个 app 。
    fyooo
        26
    fyooo  
       2016-08-19 15:56:11 +08:00
    哦,刚刚 google 一下,发现短信相关的权限设置应该是 adb shell appops set com.tencent.mm READ_ICC_SMS ignore
    honeycomb
        27
    honeycomb  
    OP
       2016-08-19 16:44:11 +08:00 via Android
    @fyooo 源代码的 AppopsManager.java 里有说明的
    lsmgeb89
        28
    lsmgeb89  
       2016-08-20 03:38:14 +08:00 via Android
    手持 6P ,但不知道国外大厂的 App 兼容情况怎么样了?
    dvorak
        29
    dvorak  
       2016-08-20 16:14:31 +08:00
    @honeycomb 能请教下具体的测试方法吗,我测试了淘宝和百度云,即使 set ignore ,也还可以看到服务在运行。
    honeycomb
        30
    honeycomb  
    OP
       2016-08-20 21:55:34 +08:00   ❤️ 1
    @dvorak
    这个 OP 似乎不会限制前台 service ,或者是处于 bound 状态的


    我只找到了一个关于这个 OP 的说明:
    “ They have an adb command that will make the app stop receiving Implicit Broadcasts that are registered statically, and also impose a timeout on Background Services when the app is in the background ”

    这里“ Background Services ”显然不包括前台 Service ,可能也不包括 bound service

    https://oneprogrammingtip.wordpress.com/2016/04/11/getting-your-apps-ready-for-android-n-background-optimization/


    在 Android 7 DP5 及以前的 Android 有一个一直没有解决的 bug ,应用可以发起一个前台 service 并不显示通知(前台 service 本被设计为不允许出现这种情况)。但是这个 bug 目前已经被标注为 releaseFuture ,所以有可能会出现在 22 号的更新
    dvorak
        31
    dvorak  
       2016-08-21 12:59:07 +08:00
    @honeycomb 多谢指教
    int64ago
        32
    int64ago  
       2016-08-22 11:41:34 +08:00
    所以 已经 22 号了,按照时差算,美国也基本 22 号了
    zhxhwyzh14
        33
    zhxhwyzh14  
       2016-08-22 17:30:52 +08:00
    这个相当于 组织运行的功能啦?
    zhxhwyzh14
        34
    zhxhwyzh14  
       2016-08-22 17:31:06 +08:00
    @int64ago 咋也得等人家上班吧。。
    janeyee110
        35
    janeyee110  
       2016-08-22 19:06:53 +08:00
    估计明天,今天并没有收到 7.0 的推送。
    honeycomb
        36
    honeycomb  
    OP
       2016-08-23 01:12:30 +08:00   ❤️ 1
    @zhxhwyzh14

    见 30 楼,是有限的限制。

    相比之下,这个 managed profile 新增的特性比较有用:

    Work mode: Work mode allows you to turn on and off your device's work apps and notifications for a better work, life balance.

    意味着 Oasisfeng 的新应用 island 可以加入在某种程度比冰箱 /阻止运行更好的解决方案:

    1 ,那些不令人喜爱的应用会老实地呆在额外地 managed profile 沙盘里,无法访问外界的任何用户数据
    2 ,为了让它们没有后台运行,直接“ turn off your device's work apps ”即可

    注: Android for work 使用了 Android 5.0 新增的 managed profile 特性
    caiych
        38
    caiych  
       2016-08-23 11:21:25 +08:00
    @honeycomb Island 刚出的时候给 oasis 写过 feedback 问会不会加一个按钮停掉所有 Work Profile 中的 App
    结果现在 Android 有这个 feature 了…
    honeycomb
        39
    honeycomb  
    OP
       2016-08-24 00:17:57 +08:00
    @caiych 有可能它们是同一个东西
    BROWNURSIDAE
        40
    BROWNURSIDAE  
       2016-08-28 15:32:38 +08:00
    @honeycomb 所以打算做一个有 gui 的吗
    honeycomb
        41
    honeycomb  
    OP
       2016-08-28 20:10:20 +08:00
    @BROWNURSIDAE
    本事不够
    WuMingyu
        42
    WuMingyu  
       2016-09-15 21:47:13 +08:00
    实测对微信有效,但是对支付宝无效
    Liir
        43
    Liir  
       2016-09-20 09:11:12 +08:00 via iPhone
    纠结通知的请爱用 iOS
    Tarkky
        44
    Tarkky  
       2017-02-06 13:32:25 +08:00
    @fyooo 你好,请问如何查看 OP_READ_PHONE_STATE 成功?
    谢谢
    fyooo
        45
    fyooo  
       2017-02-06 14:19:32 +08:00
    @Tarkky adb shell appops get PKG_NAME
    Wicheol
        46
    Wicheol  
       2017-02-13 10:55:08 +08:00
    UC 浏览器国际版,设置了 OP_READ_PHONE_STATE ignore 依然不让用,设置里是禁止的
    Wicheol
        47
    Wicheol  
       2017-02-13 11:18:39 +08:00
    微博国际版可以成功忽略,不知 UC 这个流氓怎么绕过的
    honeycomb
        48
    honeycomb  
    OP
       2017-02-13 13:39:37 +08:00
    @Wicheol
    绕过是做的到的。

    最直接的办法,也是用 AppOps 类来查看应用的这个 OP 是否是非 allow
    另一个想法是检查获取到 IMEI ,发现不符合预期(比如是 null ,或者不是 13 个字符长度),便认为没有获取到,让前台逻辑直接退出应用

    目前已知 UC 的其它滥用:
    使用了一种绕过 force close 的保活措施

    另外,为什么要用这种应用?
    退一步说,微信支付宝这种就算了,你居然在用 UC ??
    Wicheol
        49
    Wicheol  
       2017-02-13 15:32:17 +08:00 via Android
    @honeycomb 好吧 卸载了… 装是因为想找一个能改 ua 的浏览器,国际版第一眼看上去还比较清爽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2727 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:27 · PVG 13:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.