❶ android权限机制
我们知道 Android 应用程序是沙箱隔离的,每个应用都有一个只有自己具有读写权限的专用数据目录。但是如果应用要访问别人的组件或者一些设备上全局可访问的资源,这时候权限机制就能系统化地规范并强制各类应用程序的行为准则。
Android 安全性概览
在 Android 中,一个权限,本质上是一个字符串,一个可以表示执行特定操作的能力的字符串。比如说:访问 SD 卡的能力,访问通讯录的能力,启动或访问一个第三方应用中的组件的能力。 权限被授予了之后,首先会在内存和本地中有记录,这在调用系统binder服务和其他应用组件时做鉴权依据,比如调用系统binder服务时会通过Binder.getCallingUid()拿到调用者的Uid,而Uid一般都是与应用包名一一对应的,再拿这个Uid到PMS里去查这个应用对应的权限。 其次会按被授予的权限将应用分到某个组。 可以参考 https://www.jianshu.com/p/a17c8bed79d9
自定义权限的应用场景在于限制其它应用对本应用四大组件的访问。具体用法可以参考 https://www.cnblogs.com/aimqqroad-13/p/8927179.html
pm list permissions -f 命令可以详细查看 Android 所有预定义的权限。
更详细的权限信息参考 https://developer.android.com/reference/android/Manifest.permission?hl=zh-cn#WRITE_EXTERNAL_STORAGE
可以看到一个权限的信息包括:定义的包名、标签、描述、 权限组 和 保护级别 。
权限根据设备的功能或特性分为多个组。如果应用已在相同权限组中被授予另一危险权限,系统将立即授予该权限,如READ_CONTACTS和WRITE_CONTACTS。
SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 由于其特殊性,其申请方式与其它权限都不同。
其授予流程如下:
(关于 AppOpsManager 是什么可以参考: https://segmentfault.com/a/1190000009214983 )
这里简要分析下ActivityCompat#requestPermissions的流程:
更详细的权限授予流程源码分析可以参考: https://segmentfault.com/a/1190000009214983
普通权限: 清单文件中声明即可。
危险权限: 方式一: pm grant application_package android.permission.CHANGE_CONFIGURATION 方式二:appops set application_package permission_num 0/1
appops可以授予的权限参考 android.app.AppOpsManager 中的声明
系统签名权限: 方式一:将app迁移到system/priv-app目录中。 方式二:看不懂,参考 https://blog.csdn.net/abcd_3344_abcd/article/details/50698759
android 4.4 访问sd卡需要申请权限。 您的应用在 Android 4.4 上运行时无法读取外部存储空间上的共享文件,除非您的应用具有 READ_EXTERNAL_STORAGE 权限。也就是说,没有此权限,您无法再访问 () 返回的目录中的文件。但是,如果您仅需要访问 getExternalFilesDir() 提供的您的应用特有目录,那么,您不需要 READ_EXTERNAL_STORAGE `权限。
android 6.0 运行时权限。 此版本引入了一种新的权限模式,如今,用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。 对于以 Android 6.0(API 级别 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法。即使您的应用并不以 Android 6.0(API 级别 23)为目标平台,您也应该在新权限模式下测试您的应用。 如需了解有关在您的应用中支持新权限模式的详情,请参阅 使用系统权限 。如需了解有关如何评估新模式对应用的影响的提示,请参阅 权限最佳做法 。
android 7.+ 应用间共享文件要使用FileProvider。 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file://URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。 要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider `类。如需了解有关权限和共享文件的详细信息,请参阅 共享文件 。
android 8.+
同一权限组的权限在被授予了之后也需要显式的再申请一次。
在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。 对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。 例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 。应用请求 READ_EXTERNAL_STORAGE ,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE ,因为该权限也属于同一 STORAGE 权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE ;不过,如果该应用后来又请求 WRITE_EXTERNAL_STORAGE ,则系统会立即授予该权限,而不会提示用户。
android 9
隐私权限变更。
为了增强用户隐私,Android 9 引入了若干行为变更,如限制后台应用访问设备传感器、限制通过 Wi-Fi 扫描检索到的信息,以及与通话、手机状态和 Wi-Fi 扫描相关的新权限规则和权限组。
android 10
隐私权变更。
外部存储访问权限范围限定为应用文件和媒体,在后台运行时访问设备位置信息需要权限,针对从后台启动 Activity 的限制等。
android 11
隐私权限变更。
更详细的版本变更请参考 https://developer.android.com/preview/privacy?hl=zh-cn
❷ android应用和ios的区别是什么
最大的区别是android应用是开源的,二者的区别如下:
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的沙盒技术解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。
安卓虚拟机机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。
❸ android与ios系统有什么区别
在过去,Android和iOS这两款操作系
统主要是以功能和精致程度来彼此区分
的:Android的功能多样性和个性化程度
要高于iOS,而iOS则具备更高的精致程度。
但随着iOS 8和Android 5.0 Lollipop
的发布,一切都发生了改变。iOS 8的功能已经不输Android,而Lollipop新的材料设计也达到了和iOS比肩的精致程度。
由此我们似乎可以推断,iOS和Android现在比以往任何时候都更加相似——从表面上看,情况的确如此。但两款操作系统所提供的总体体验已经变得非常不同,这也是最为有趣的地方。
可以这么说,iOS和Android比以往任
何时候都要更加相似,同时也更加不同。
因此,我们也应该去检验这两个平台的相似和不同之处。
功能在最新的升级当中,苹果让自己的操作系统在功能上赶上了Android。在多年的时间里,iOS用户想要拥有能够更好彼此交流的应用、系统小部件、还有第三方输入法。苹果终于带来了这些功能,虽然是以自己独特的方式。
与此同时,Android采纳了相似的UI
范式,以及iOS更好的通知系统。
虽然两款系统因此背负了抄袭的骂
名,但笔者认为,这对于所有人都是件好事。
虽然两个平台依然存在各自独有的功
能,但这些区别更多的是哲学观念上的。
就拿它们处理默认应用的方式来说。在Android当中,你可以使用任意浏览器、
邮件客户端或聊天客户端来取代系统的内置工具。而在iOS平台,你可以安装这些额外的应用,甚至是能和这些应用进行交谈的程序。但苹果的核心应用永远都会作为系统默认选项存在。换句话说,这并非是iOS不能拥有和Android一样的功能(反之亦然),而是它们选择如此。
除此之外,应用的世界也在演变。如
果非要选择,和笔者交流过的大多数开发者还是会有些选择iOS。在两个平台上发布应用并保持功能的一致性已经变成了一种“礼节需要”。
应用曾经是Android和iOS最大的区别,但随着双方越来越像,实际的系统功能也达到了近乎平等,在两个系统之间做出选择的理由也发生了改变。
外观和感觉在材料设计的帮助下,Android Lollipop在设计角度上成为了谷歌最具野心的一个系统版本。
在这些年里,原生Android的外观发生了不小的改变。曾经那个黑莓/Windows Mobile的竞争者如今已经脱变
成了一款以触控为中心的操作系统,这样的发展方向也被证明是正确的。
但Android所面临的问题是,大多数Android用户所获得的都并不是原生的谷歌体验,他们所使用的可能是三星的TouchWiz、HTC的Sense、或是小米的MIUI。
这让人觉得很遗憾,因为Lollipop是
一个非常精致的系统版本,透明化、图层、阴影和纹理都是谷歌所精心设计的。
不过好消息是,谷歌正在和主要OEM商合作,来把材料设计的元素带到这些定制界面当中。虽然最终效果如何还很难说,但至少谷歌考虑到了这一点。
让所有人都获得相同的体验是非常重
要的,因为在这么多年的时间里,Android似乎是第一次在用户界面和用户体验上面拥有了真正清晰的想法。更为重要的是,Lollipop的体验还延伸到了平板、手机、电视和可穿戴领域。无论是Android Wear中的卡片的图层和纹理,还是Android TV中的用色和总体设计语言,这一切看上去终于像是属于同一个产品系列的了。
在很长一段时间里,苹果对于这个问
题的处理一直非常出色。此外,在OS XYosemite当中,苹果以一种既不臃肿也不奇怪的方式让自己所有的平台都享受到了用户界面和用户体验的精华部分。
至于iOS 8本身,它更像是对iOS 7进
行的一次微调。苹果花了1年的时间来在其他的产品(比如最明显的OS XYosemite)上来推行这些改变。从他们对于Apple Watch的短暂展示中也可以看出,苹果的可穿戴设计当中也具备着相同的设计元素。
从视觉上看,两款操作系统在设计语
言和用色上都存在相似之处,但它们之间的区别依然非常大。这些不同之处主要体现在应用内的导航和返回主屏幕的方式上。
Home键是苹果的标志性元素,导航
主要发生在应用内,大多数的导航方式通常存在于屏幕底部。而Android中的导航是通过屏幕底部的三枚虚拟按键来实现的,虽然Lollipop对这些按键的图标进行了改变,但核心方式依然相同。体验当然,iOS 8和Lollipop最大的区别是使用体验。
在iOS和苹果整体的操作系统身上,笔者的最大感受是苹果想要帮助用户尽可能简单地完成自己的任务。这一点在iOS8的部分功能上最为明显,包括新的小部件支持、连续互通和Handoff。只需在屏幕上向下滑动,你就能够看到天气、股票或进行计算。而把邮件或网页的进度从手机搬到Mac或iPad上也非常简单。
Android的体验有点不同。