hal反编译
1. mt6735修改了HAL层的camera代码,如何快速编译
vendor/mediatek/proprietary/custom/mtXXX/hal。还有不懂,到一牛网论坛
2. 请教代码解密
我不信有什么解释器强大到可以解释这么一长串连续且没有规则的代码。
所以我有理由相信:这是乱码,而不是代码。或者就是已经过编译的二进制代码的十六进制格式,除非能够知道用的什么编译器,并且有本事进行反编译。
---------
神奇。不知是怎么对应的。
3. 如何快速编译hal层的修改
如果版本正确的话,可以重新new啊,看你修改的哪些文件了,但是重新new是肯定可以的,然后在build/target/proct/***(项目脚本文件名,一般)/,目录下执行cp E* M* *.img *.bin,拷出来的东西就可以用烧写工具重新给真机烧系统了
4. stm32的hal库为什么编译变慢
因为考虑到各系列的兼容性,相对而言HAL库比较庞大点,相比标准库可能慢点。
ST还有low layer library, 库文件跟HAL库在 相同目录下。多数芯片都有基于LL库
的例程。
5. 开源的Windows系统——ReactOS
ReactOS 是一个开发与Windows NT和Windows 2000应用程序和硬件驱动程序兼容的开源操作系统的项目。此项目当前虽然只是处于 内部测试(alpha) 开发状态,但到2005年1月其中一些子项目已经完成了目标。
ReactOS主要是由c语言编写。部分组件则由C++编写,例如ReactOS 文件浏览器。
ReactOS的许可协议主要为GNU通用公共许可证,也有少量代码以GNU宽通用公共许可证、BSD许可证之类的开源许可证发行。
为确保操作系统没有任何一部分是看过泄漏出来的微软 Windows 源码的人所写,或者逆向工程的过程达不到净室设计标准,一个全盘的源码审查由ReactOS主要开发者下令展开。此审查当前已经结束。
发展历程
启动开发
大约在1996年时,一群开源软件开发者启动了一个名为 FreeWin95 的项目,旨在实现一个Windows 95的克隆操作系统。这个项目当时只停留在关于系统实现的讨论上。
虽然对于 FreeWin95 项目期待很高,但直到 1997 年末,项目还没有公开发布任何版本,于是项目协调员Jason Filby 联合大家重振该项目并起了一个新名称 “ReactOS” ,并计划重新实现 Windows NT。1998年 2 月 ReactOS 项目正式启动,开始开发系统内核和基本的驱动程序。
代码审查
为了避免版权起诉,ReactOS 必须明确地完全区分并且不派生于 Windows,这是一个需要非常谨慎工作的目标。2006年1月17日,Hartmut Birr 在 ReactOS 开发者邮件列表中指出 ReactOS 包含有反编译的 Windows 源码。因此开发者暂时禁止非开发者进入系统。鉴于 ReactOS 是开放源码软件,此举引起开放源码社群的不满。ReactOS 的贡献者没受当时的举动影响。 不久后所有软件开发工程都能自由进入了。由于 Birr 的指摘未能证实,开发者决定审查源码。 可能“受污染”的源码会被封锁,直到那些源码经审查后确定无问题。
大部分的源码已解封,维护和开发都可继续进行,而审查亦同时进行。
2008年,源码已经全部解封。审查也已经全部结束。维护和开发得以正常继续。
参与 Google Summer of Code
从 2006 年开始,ReactOS 项目参与了几次 Google Summers of Code。例如,在GSoC 2011 中, ReactOS 指导了一个将 lwIP 集成到网络堆栈中的学生项目。迄今为止,ReactOS曾在 GSoC 参与过五次:2006年,2011年,2016 年,2017年 和 2018 年。2019 年也将参与。
公开演示
俄罗斯的政治人物 Viktor Alksnis 会见了项目协调员 Aleksey Bragin,Aleksey Bragin介绍了该项目并演示了该项目,演示中显示 ReactOS 在 2007 年已经可以运行当时的 Total Commander 和 Mozilla Firefox。 它还吸引了时任俄罗斯总统梅德韦杰夫(Dmitry Medvedev)的关注。 梅德韦杰夫访问了斯塔夫罗波尔地区的一所高中,巧合的是 ReactOS 开发者 Marat Karatov 正是该学校的高中生,他借此机会向总统介绍了开源 Windows 系统,并请求总统资助 100 万欧元。梅德韦杰夫称对 ReactOS 很感兴趣,表示会考验资助事宜。
ReactOS 社区版
2014年4月,ReactOS 项目宣布推出 iegogo活动,推出基于 0.4版本的 ReactOS Community Edition。筹资活动的目标是50,000美元,除此之外还有额外的伸展目标。ReactOS Community Edition 的开发将以社区为中心,ReactOS用户投票和资金决定项目旨在支持哪些软件和硬件驱动程序。2014年 6 月 1 日,关于Indiegogo的灵活众筹活动结束时筹集了25,141美元用于社区版的开发,并且不久后启动了支持硬件和软件的投票过程。
ReactOS Hackfest 2015
ReactOS 项目于2015年8月7日至12日在德国亚琛市举办了一场Hackfest。Hackfest 圆满结束,因为它为 ReactOS 增加了许多功能。
系统开发
核心开发
ReactOS主要用C语言进行编写,另外包含一些用 C ++ 编写的元素,如 ReactOS Explorer 和声音栈。该项目使用 MinGW 和 Visual Studio 进行编译。 开发人员的目标是使内核和用户模式API与Windows NT 5.2(Windows Server 2003)兼容,并增加对更多应用程序和硬件的支持,并计划在开发日趋成熟时针对更新版本的Windows。DirectX支持是通过内部实施 ReactX进行的。2D硬件加速渲染是本机完成的,而其他绘图功能则重定向到OpenGL作为权宜之计解决方案。 开发进度受开发团队规模及其经验水平的影响。作为对实施 Windows 7所需工作量的估计,微软雇佣了大约1,000名开发人员,组成了25个团队,每个团队平均有40名开发人员。但截至2011年9月2日,在 Ohloh 的 ReactOS条目中,通过“非常大,活跃开发者只有 33 位,这些开发人员在 12 个月的时间内贡献了累计,并且累积了104个以前通过 Subversion 从项目开始为代码贡献代码的用户。ReactOS 开发人员 Michele C.在米兰举办的 Hackmeeting 2009 上的演讲中指出,大多数开发人员在使用ReactOS时都了解 Windows体系结构,并且没有任何先验知识。 虽然ReactOS当前主要针对 x86 / AMD64 PC 平台,但是,移植到ARM 架构的努力“正在进行中”,虽然它没有产生太多功能而被放弃了。支持的的Xbox,变体IA-32体系结构,是通过使用一个特定于体系结构的加入HAL,虽然这一点,与端口沿的PowerPC,不再积极维护。
硬件驱动程序堆栈
在硬件驱动程序方面,例如UniATA项目为ReactOS 提供串行ATA驱动程序。该项目还尝试使用FullFAT库重写其FAT可 安装文件系统。ReactOS利用 Haiku 的 USB 堆栈作为参考,并作为其 USB 支持的基础。 网络 ReactOS的网络堆栈构建在 FreeBSD中 OSKit 网络堆栈端口的TCP部分,以及内部开发的面向数据包协议(如IP)的实现。后来,lwIP被集成到ReactOS的网络堆栈中。Samba / Samba TNG 项目已经提供了LSASS,SAM,NETLOGON 和打印假脱机等 Windows 网络服务作为开源替代方案。
与 Wine 项目合作
ReactOS 和 Wine 项目共享本机运行二进制 Windows 软件的目标,因此可以共享许多依赖项和开发。 ReactOS 使用 Wine 项目的一部分,以便它可以从 Wine 在实现 Win32 API方面的进展中受益。虽然由于体系结构的不同,Wine 的 NTDLL,USER32,KERNEL32,GDI32和 ADVAPI32 组件不能由 ReactOS 直接使用,但代码片段和其他部分可以在两个项目之间共享。不过内核由 ReactOS 单独开发,因为 Wine 依赖于现有的类 Unix 内核。。
此外,ReactOS另外有一支实验性的Arwinss团队,透过另一种方式去构建Win32 API,使USER32及GDI32的支持可以做得更好。ReactOS原来的Win32子系统完全以Windows的等同为蓝本,但Arwinss则透过合并原来ReactOS的Win32子系统及Wine的Win32子系统的架构,以好好利用Wine的系统兼容性。这样,Arwinss就可以让用户透过一个遥距的X server作显示,而无需硬性规定必须要用硬件上的显示屏。
影响与评价
下面一些关于 ReactOS 项目的批评提出几条为什么他们不相信 ReactOS 会成为一个有价值的项目的原因。其中,有人指出把与 Windows NT 4.0 兼容作为 ReactOS 的发布目标是一个局限,因为 NT 4.0 评价不佳而且它已经过时了。
作为回复,有人提出虽然当前是把与 Windows NT 4.0 兼容作为目标,但是,Windows 后来基于 NT 架构的系统都与 NT 4.0 在系统层次上高度相似(例如:Windows 2000, Windows XP, Windows Server 2003)。因此,想要与后续的 Windows 版本兼容,只要 NT 4.0 的目标完成,剩下都简单了。 以此为由,该批评的回复者说把 NT 4.0 的兼容作为里程碑并不是一个局限,而是未来开发的基础。
其它人则批评认为我们已经有好几个基于 Unix(Linux 及不同版本的 BSD)的操作系统, 与其再创建一个新的, 不如集中精力改善旧的,努力做好 WINE,让现有的 WINDOWS 应用程序在其上运行得更好。但是,ReactOS 开发者及其他拥护者辩解说,UNIX 类操作系统不一定是唯一的最好的操作系统类型。NT 的设计含有很多概念是 Unix 工作方式的改进,而且一个在更低层次更似 Windows 的操作系统(即是设计成与 Windows 相似,而非执行某某应用程序,尝试把另一个操作系统变成 Windows)将更有机会成功达到更广阔地兼容现有的 Windows 应用程序和(特别是)硬件驱动程序。
未来目标
硬件需求
值得留意的是,ReactOS亦可在能模拟上述硬件的软件内运作,比如Virtual PC、VMware、Bochs或QEMU。
眼见Windows NT 4.0可在i386以外的MIPS、Alpha AXP和PowerPC架构运行,而NT派生的操作系统如Windows XP和Windows Server 2003又已被移植到不同的硬件架构上(例如x86-64、IA-32及IA-64),ReactOS开发者亦开始注意可移植性。譬如对IA-32架构变种Xbox平台的支持,已加入0.2.5发布版,而直到2006年上半年,PowerPC port和Xen port的工程仍在努力。
6. 瑞丽诗植发的效果怎么样
虽然目前的植发技术已经相当成熟,但是若想得到一个完整的植发效果,其实还和许多因素有关,比如你的脱发面积、种植数量、毛囊资源质量、植发技术等多个因素综合来看。
一、植发医生的技术经验,一个好的植发效果离不开植发医生的合理设计方案
二、植发技术,目前的植发技术本质上分为这么两种植发技术,一种叫做有痕植发,一种叫做无痕植发。由于有痕发会在后枕部会留下一条疤痕,所以目前较广泛使用的是无痕植发技术,因为创伤小,恢复较快,对毛囊的损伤较小,能够更好的达成手术整体效果。
三、植发价格,现在的十全十密脱发区位定价体系,将脱发区分为9+1个区位,按区位计费,每个区位的单位数由客户的密度要求和供体情况来决定,不设上限,以效果完整为目的,同时,客户所需的区位数越多,每个区位的单价却反之更低,契合植发的本质:让头发重新布局,实现完整和美观。
四、术后保养,当然,一个完整的植发效果,不仅与医生的经验技术等有关,也有后期的保养护理,好好的遵循生活规律,健康生活,可以更好巩固自己的植发效果。
7. android系统app frameworks层,hal层,core libs代码编译之后在哪个镜像里
Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下:
|-- Makefile
|-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik java虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- libcore
|-- ndk
|-- device
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)
bionic 目录
|-- libc (C库)
| |-- arch-arm (ARM架构,包含系统调用汇编实现)
| |-- arch-x86 (x86架构,包含系统调用汇编实现)
| |-- bionic (由C实现的功能,架构无关)
| |-- docs (文档)
| |-- include (头文件)
| |-- inet
| |-- kernel (Linux内核中的一些头文件)
| |-- netbsd (?netbsd系统相关,具体作用不明)
| |-- private (?一些私有的头文件)
| |-- stdio (stdio实现)
| |-- stdlib (stdlib实现)
| |-- string (string函数实现)
| |-- tools (几个工具)
| |-- tzcode (时区相关代码)
| |-- unistd (unistd实现)
| `-- zoneinfo (时区信息)
|-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)
|-- libm (libm数学库的实现,)
| |-- alpha (apaha架构)
| |-- amd64 (amd64架构)
| |-- arm (arm架构)
| |-- bsdsrc (?bsd的源码)
| |-- i386 (i386架构)
| |-- i387 (i387架构?)
| |-- ia64 (ia64架构)
| |-- include (头文件)
| |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)
| |-- powerpc (powerpc架构)
| |-- sparc64 (sparc64架构)
| `-- src (源代码)
|-- libstdc++ (libstdc++ C++实现库)
| |-- include (头文件)
| `-- src (源码)
|-- libthread_db (多线程程序的调试器库)
| `-- include (头文件)
`-- linker (动态链接器)
`-- arch (支持arm和x86两种架构)
bootable 目录
|-- bootloader (适合各种bootloader的通用代码)
| `-- legacy (估计不能直接使用,可以参考)
| |-- arch_armv6 (V6架构,几个简单的汇编文件)
| |-- arch_msm7k (高通7k处理器架构的几个基本驱动)
| |-- include (通用头文件和高通7k架构头文件)
| |-- libboot (启动库,都写得很简单)
| |-- libc (一些常用的c函数)
| |-- nandwrite (nandwirte函数实现)
| `-- usbloader (usbloader实现)
|-- diskinstaller (android镜像打包器,x86可生产iso)
`-- recovery (系统恢复相关)
|-- edify (升级脚本使用的edify脚本语言)
|-- etc (init.rc恢复脚本)
|-- minui (一个简单的UI)
|-- minzip (一个简单的压缩工具)
|-- mttils (mtd工具)
|-- res (资源)
| `-- images (一些图片)
|-- tools (工具)
| `-- ota (OTA Over The Air Updates升级工具)
`-- updater (升级器)
build目录
|-- core (核心编译规则)
|-- history (历史记录)
|-- libs
| `-- host (主机端库,有android “cp”功能替换)
|-- target (目标机编译对象)
| |-- board (开发)
| | |-- emulator (模拟器)
| | |-- generic (通用)
| | |-- idea6410 (自己添加的)
| | `-- sim (最简单)
| `-- proct (开发对应的编译规则)
| `-- security (密钥相关)
`-- tools (编译中主机使用的工具及脚本)
|-- acp (Android "acp" Command)
|-- apicheck (api检查工具)
|-- applypatch (补丁工具)
|-- apriori (预链接工具)
|-- atree (tree工具)
|-- bin2asm (bin转换为asm工具)
|-- check_prereq (检查编译时间戳工具)
|-- dexpreopt (模拟器相关工具,具体功能不明)
|-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关)
|-- fs_config (This program takes a list of files and directories)
|-- fs_get_stats (获取文件系统状态)
|-- iself (判断是否ELF格式)
|-- isprelinked (判断是否prelinked)
|-- kcm (按键相关)
|-- lsd (List symbol dependencies)
|-- releasetools (生成镜像的工具及脚本)
|-- rgb2565 (rgb转换为565)
|-- signapk (apk签名工具)
|-- soslim (strip工具)
`-- zipalign (zip archive alignment tool)
dalvik目录 dalvik虚拟机
.
|-- dalvikvm (main.c的目录)
|-- dexmp (dex反汇编)
|-- dexlist (List all methods in all concrete classes in a DEX file.)
|-- dexopt (预验证与优化)
|-- docs (文档)
|-- dvz (和zygote相关的一个命令)
|-- dx (dx工具,将多个java转换为dex)
|-- hit (?java语言写成)
|-- libcore (核心库)
|-- libcore-disabled (?禁用的库)
|-- libdex (dex的库)
|-- libnativehelper (Support functions for Android's class libraries)
|-- tests (测试代码)
|-- tools (工具)
`-- vm (虚拟机实现)
development 目录 (开发者需要的一些例程及工具)
|-- apps (一些核心应用程序)
| |-- BluetoothDebug (蓝牙调试程序)
| |-- CustomLocale (自定义区域设置)
| |-- Development (开发)
| |-- Fallback (和语言相关的一个程序)
| |-- FontLab (字库)
| |-- GestureBuilder (手势动作)
| |-- NinePatchLab (?)
| |-- OBJViewer (OBJ查看器)
| |-- SdkSetup (SDK安装器)
| |-- SpareParts (高级设置)
| |-- Term (远程登录)
| `-- launchperf (?)
|-- build (编译脚本模板)
|-- cmds (有个monkey工具)
|-- data (配置数据)
|-- docs (文档)
|-- host (主机端USB驱动等)
|-- ide (集成开发环境)
|-- ndk (本地开发套件——c语言开发套件)
|-- pdk (Plug Development Kit)
|-- samples (演示程序)
| |-- AliasActivity ()
| |-- ApiDemos (API演示程序)
| |-- BluetoothChat (蓝牙聊天)
| |-- BrowserPlugin (浏览器插件)
| |-- BusinessCard (商业卡)
| |-- Compass (指南针)
| |-- ContactManager (联系人管理器)
| |-- CubeLiveWall** (动态壁纸的一个简单例程)
| |-- FixedGridLayout (像是布局)
| |-- GlobalTime (全球时间)
| |-- HelloActivity (Hello)
| |-- Home (Home)
| |-- JetBoy (jetBoy游戏)
| |-- LunarLander (貌似又是一个游戏)
| |-- MailSync (同步)
| |-- MultiResolution (多分辨率)
| |-- MySampleRss (RSS)
| |-- NotePad (记事本)
| |-- RSSReader (RSS阅读器)
| |-- SearchableDictionary (目录搜索)
| |-- **JNI (JNI例程)
| |-- SkeletonApp (空壳APP)
| |-- Snake (snake程序)
| |-- SoftKeyboard (软键盘)
| |-- Wiktionary (?维基)
| `-- Wiktionary**(?维基例程)
|-- scripts (脚本)
|-- sdk (sdk配置)
|-- simulator (?模拟器)
|-- testrunner (?测试用)
`-- tools (一些工具)
8. windows系统的源代码,为什么没人反编译出来
Windows内核级别的文件(如ntoskrnl.exe、hal.dll、子系统等),即使编译出来了正常人也看不懂,而且反编译后源代码会有所缺失,没用
9. android的系统结构
Android 是运行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。
Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具 Repo来初始化源码。Repo 是 Android 用来辅助Git工作的一个工具。 APK是安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
APK文件结构
一个APK文件结构为:
1. META-INF (注:Jar文件中常可以看到);
2. res (注:存放资源文件的目录) ;
3. AndroidManifest.xml (注:程序全局配置文件) ;
4. classes.dex (注:Dalvik字节码);
5. resources.arsc (注:编译后的二进制资源文件)。
总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexmp命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。
在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。
最终我们平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。 Android 的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL 的目的是为了把 Android framework 与 Linux kernel 隔开,让 Android 不至过度依赖 Linux kernel,以达成 Kernel independent 的概念,也让 Android framework 的开发能在不考量驱动程序实现的前提下进行发展。
HAL stub 是一种代理人(Proxy)的概念,Stub 是以 *.so 档的形式存在。Stub 向 HAL“提供”操作函数(Operations),并由 Android runtime 向 HAL 取得 Stub 的Operations,再 Callback 这些操作函数。HAL 里包含了许多的 Stub(代理人)。Runtime 只要说明“类型”,即 Mole ID,就可以取得操作函数。 操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。
Android采用OpenCORE作为基础多媒体框架。Open CORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android 使用skia 为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia 功能还只是雏形的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia 也是Google Chrome 的图形引擎。
Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。
Android的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
Dalvik虚拟机可以有多个实例(Instance), 每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik 虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。 Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部分也分别使用各自独立的识别方式。Linux就是这样将应用与应用,应用与系统隔离开。
系统更多的安全功能通过权限机制提供。权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:
拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。