V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
JasonQs
V2EX  ›  全球工单系统

安卓的权限管理

  •  
  •   JasonQs · 2019-04-05 10:05:38 +08:00 · 4251 次点击
    这是一个创建于 2090 天前的主题,其中的信息可能已经有所发展或是发生改变。
    安卓 6 以后 一些权限需要运行时授予,比如“访问外部文件资源权限” 可能是见得最多的了。

    这个权限一般用来干嘛?
    比如微信用这个来监听截图文件夹来在你刚截完图之后问你是不是要发。
    或者是我把应用的数据文件放在 sd 卡根目录

    这个权限可以用来干嘛?
    它可以访问到别的应用的公开数据,比如 QQ 的图片缓存

    这个权限是必要的?
    不是的,安卓给应用分了一个不需要权限的存储文件夹,但大厂可能由于历史原因(毕竟安卓 6 以前对这个权限没这么严格)把数据都放在 sd 卡根目录

    我为啥发这个帖子?
    安卓的生态是需要开发者维护的。如果遵从开发规范,现在的安卓已经是非常舒适的了。

    我希望大厂们在开发新功能的同时,也遵照安卓的开发规范,把历史代码适配到新的系统上去,而不是简单粗暴的不给权限就不给用。
    30 条回复    2019-04-10 22:54:14 +08:00
    jasonyang9
        1
    jasonyang9  
       2019-04-05 10:16:14 +08:00
    希望,也就是靠自觉咯,那我只有 2 个字的回复:呵呵
    catalina
        2
    catalina  
       2019-04-05 10:19:42 +08:00 via Android   ❤️ 5
    你真觉得那帮吃人不吐骨头的大厂会“自觉”?对所谓大厂“用户隐私是一条不可触碰的高压线”的声明,我只有一句 qnmlgb 送给他。
    我就从来没见过有权力后没作恶的,人或团体都是。
    Immemorial
        3
    Immemorial  
       2019-04-05 10:21:05 +08:00
    关于权限… Android Q 给应用的存储空间套了个沙箱…权限也收紧了不少…不过用上也要到年末或者明年了
    HongJay
        4
    HongJay  
       2019-04-05 10:21:51 +08:00
    android 开发都快死了。你还要求这要求那。。用小程序去吧。让 qq 微信拉屎你就开心了
    gzxu
        5
    gzxu  
       2019-04-05 10:24:55 +08:00 via Android
    Anyway,个人开发者表示"/sdcard"比用包名拼接生成路径,或者调用 API 获得路径,方便多了,估计第三方 SDK 厂商感受更明显,因为包名是未知的,内置路径没办法做成 SDK 发布前的编译期间就能确定的常量
    JasonQs
        6
    JasonQs  
    OP
       2019-04-05 10:25:02 +08:00 via Android
    是的,只是希望。靠卸载来抵制吗?我觉得太微不足道了。隔壁贴都在说卸载搜狗,可是个人觉得搜狗输入法确实挺好用的。
    要卸这个卸那个的,用户以为这样就能对大厂有什么损害呢,其实一点不痒。
    同理的还有杀熟,他们能杀熟是因为用户已经离不开了呀,用户除了骂两声还能干嘛呢。
    所以我在这边也只是卑微的希望大厂对安卓生态做出些贡献
    gzxu
        7
    gzxu  
       2019-04-05 10:27:18 +08:00 via Android
    @JasonQs 不恰当地打个比方,大家都在杀熟,让我想起了“劳动者没有办法选择不被剥削,只能选择被这个资本家剥削或者被那个资本家剥削”那句话
    JasonQs
        8
    JasonQs  
    OP
       2019-04-05 10:27:19 +08:00 via Android
    @gzxu 也就是传个 context 的事。另外,在根目录堆垃圾我觉得很不好
    JasonQs
        9
    JasonQs  
    OP
       2019-04-05 10:28:58 +08:00 via Android
    说到杀熟,我觉得这并不是一件不好的事。软件需要赚钱,我们需要享受服务,我们花钱买服务,我觉得没有什么不妥的
    gzxu
        10
    gzxu  
       2019-04-05 10:29:22 +08:00 via Android
    @JasonQs 有的 native 库需要在编译期间以宏定义的方式指定路径啥的可能🤔只是猜想,不过人性都是有惰性的吧,能一时爽的东西就会想着一直爽😂😂
    catalina
        11
    catalina  
       2019-04-05 10:36:45 +08:00 via Android
    @gzxu 最重要的是第三方 sdk 一般都提供跨 app 追踪的功能,要是不能写 sdcard 的话。。。
    zhenghuiy
        12
    zhenghuiy  
       2019-04-05 11:06:16 +08:00 via iPhone   ❤️ 1
    这事没那么简单:
    1,Android 4.4 之前的版本,只要需要写文件到 sdcard 就必须要申请该权限,不管是不是把数据放在应用目录下。
    2,Android 4.4 及以后的版本虽然针对应用目录下的文件读写放开了权限但应用目录有个问题是,当 app 卸载会跟着被删除。这对于部分对用户有用的文件(比如用应用编辑的图片等)显然不可接受。
    3,就算应用自己克服了前面两点,但二方库、三方库没有处理也一样需要该权限。

    理性上大概就是这三种情况。当然还有小部分是开发者素质问题,知识点没更新或者滥用权限。
    gzxu
        13
    gzxu  
       2019-04-05 11:13:02 +08:00 via Android
    @zhenghuiy 应用可以只在 Android 4.4 以前的系统上申请权限,在 4.4 及以后的系统上用 SAF,这也是文档里面推荐的做法 https://developer.android.google.cn/guide/topics/manifest/uses-permission-element.html#maxSdk
    dxppp
        14
    dxppp  
       2019-04-05 12:13:10 +08:00 via Android
    Android Q 已经比你捷足先登了
    https://sspai.com/post/53287
    https://sspai.com/post/53518

    我已经用上了
    效果不错,adb shell 开启即可
    dxppp
        15
    dxppp  
       2019-04-05 12:18:25 +08:00 via Android
    dxppp
        16
    dxppp  
       2019-04-05 12:23:13 +08:00 via Android
    dxppp
        17
    dxppp  
       2019-04-05 12:26:11 +08:00 via Android
    @Immemorial 现在就用了
    dxppp
        18
    dxppp  
       2019-04-05 12:28:06 +08:00 via Android
    @JasonQs 你这种呼吁比抵制还无厘头
    至少我可以保证我的设备我作主
    我想用什么我乐意
    mohoumk2
        19
    mohoumk2  
       2019-04-05 12:51:16 +08:00 via Android
    如果约束有用,Android Q 就不会引入沙盘机制了
    nanaw
        20
    nanaw  
       2019-04-05 14:13:57 +08:00
    然而楼主可能不知道干这种事情的不止是大厂
    sdk 供应链污染了解一下,看似多么良心优质的个人开发的 app 照样会流氓拉 shi
    它们在培养用户习惯给应用随便授权敏感权限( READ_PHONE_STATUS 和 访问公共存储)而毫不在意
    它们成功了
    yingyue
        21
    yingyue  
       2019-04-05 15:37:00 +08:00 via Android   ❤️ 1
    Android Q 已经针对这个问题有了解决

    1. 如果普通应用访问内部存储空间,那么该空间将被沙盒化并且无法和其他应用共享数据,无论该应用是否为 Android Q 版本优化。

    2. 普通应用不能获得不可重置的设备标识,无论该应用是否为 Android Q 版本优化

    3. 用户可以限制普通应用在后台使用位置,无论该应用是否为 Android Q 版本优化。

    4. 正式版中应用将无法从后台唤起界面( Activity ),无论该应用是否为 Android Q 版本优化。
    no1xsyzy
        22
    no1xsyzy  
       2019-04-05 16:03:03 +08:00
    @JasonQs 搜狗输入法好用是建立在不会用的基础上的。
    无责任瞎猜,任何有十年电脑使用经验的人都不会觉得“智能”输入法好用。
    JasonQs
        23
    JasonQs  
    OP
       2019-04-06 13:29:06 +08:00 via Android
    @no1xsyzy 有点好笑,你用的啥输入法,智能 abc ?
    JasonQs
        24
    JasonQs  
    OP
       2019-04-06 13:30:05 +08:00 via Android
    看了大家的回复才知道 android Q 已经做了这么多
    qq05629
        25
    qq05629  
       2019-04-06 16:29:57 +08:00 via iPhone
    连个输入法都能用出优越感了。。。
    no1xsyzy
        26
    no1xsyzy  
       2019-04-08 09:13:24 +08:00   ❤️ 1
    @JasonQs “智能 ABC ” 名字里没 “智能” 两个字?
    小鹤,自然码,五笔,郑码,仓颉,请。

    @qq05629 哦,您要觉得键盘手没什么的话就保持您的 “优越感” 论调吧。
    反正您的手打不了字了当不了程序员了也跟我没什么关系。
    JasonQs
        27
    JasonQs  
    OP
       2019-04-08 17:38:45 +08:00 via Android
    @no1xsyzy 真是大开眼界,您是不是用 notepad 写代码呀?
    刚刚这个感谢是我给你的
    no1xsyzy
        28
    no1xsyzy  
       2019-04-08 18:52:24 +08:00
    @JasonQs 不好意思猜错了哦,有史以来最优雅的语言(集)的官方执行环境自带目前看下来最优秀的 IDE,并且还有最高效的编译器。
    提醒系统会显示感谢是谁给你的,可知没有人感谢过您。
    JasonQs
        29
    JasonQs  
    OP
       2019-04-10 00:33:17 +08:00 via Android
    @no1xsyzy 好吧,不过您也猜错了,我并不关心是谁给了我感谢。另外您的 github 有点寒酸,我不知道为什么几乎都是个 fork,自己的产出也只是些笔记而已,更奇怪的是会把这样的 github 放在资料里
    no1xsyzy
        30
    no1xsyzy  
       2019-04-10 22:54:14 +08:00
    @JasonQs 只是因为有个空所以就填上了,写程序并不是职业,只是当作一种思维过程的表达——或者说玩闹。
    github 不常清理,你这么一说我才想起,清了一大堆,该封封该删删,现在是不是清爽多了?
    我都是发完 PR 被合并了就不管的……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4231 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.