Android的四大组件及应用安装安全问题(4)
Android的四大组件及组件间通信
如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识.
四大组件简洁
Activity
- 没有Activity 可以显示UI吗?
可以的,我们可以直接操作view显示,其实Activity 只是为了让这些view 富有逻辑的意义,也就是说Activity 主要是让这些逻辑相关的view 抽象成一个一个相关page,这样就可以使这些page进行前进后退等逻辑行为.
- 没有Activity 可以显示UI吗?
Service
可以理解成一个没有UI的后台耗时的服务.ContentProvite
Android中资源共享的一种方式.然而对于一些外部app来说资源都是private的,那么ContentProvite为什么可以进行访问到.
其主要是对于一些permission可以控制的情况下,资源才可以访问到.BroadcastReceiver,
相当于就是在system level中实现了一个observer(观察者模式)广播的设计模式.主要是为了解决一对多的耦合问题.
Android是基于组件的复用,组件间的边界透明
Android中编程的模型比较特殊,他不是根据进程,也不是根据application,进程和application的边界,都被google故意的去掉了,对于应用开发者说只认识一些组件,组件,组件. 他们直接的通讯都是基于intent,也就是说你只要发布一个Intent 不用在意他到底是如何实现的,这些都交给系统去处理,你只要保证intent 指令的正确性即可.
组件的puclic 和 private
- android:exported字段
- exported的default值
- override default值
组件的permission assignment
- Securing Activities(Service也是一样)
Android定义了一些安全的方式来限制特殊activity的启动,如果要start该activity就必须申请对应的权限.
如下面代码如果要启动MyActivity 必须要申请下面权限才可以.
<activity android:name=".MyActivity" android:permission="com.testapp.permission.START_MYACTIVITY">
<intent-filter>
</intent-filter>
</activity>
应用安装的安全
应用安装的安全性考虑和调用方式
- 应用安装(安装/卸载/升级)这个过程是一个高特权/风险的操作.
- 所以用户必须可知/可控
- 主流实现方式: 客户智能委派而不能直接操作.
- 调用安装传统系统模式: 发送intent给系统的
Package Install app
下面代码会显示UI告诉用户此时需要安装的app
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(i);
特权安装模式:
系统的Package Install App内部会调用PackageManagerService的Install Package,该操作与android.permission.INSTALL_PACKAGES绑定,而且该permission 的protection level="signature|system",也就是说需要是有同样private key或者系统应用才可以调用.静默安装:
所谓的静默安装方式只存在ROOT手机上,开发者可以选择:
基于pm cmd : pm install-r静态的安装
应用安装时怎么做UID/GID分配
在安装时应用的UID/GID就已经被系统分配好,并通过PackageManagerService将分配好的UID/GID(都是10000+)存储到Databases里,当你run app时就会从该db从获取它的UID/GID,也就是安装和运行的UID/GID 相同.
Android的四大组件及应用安装安全问题(4)的更多相关文章
- android中四大组件之间相互通信
好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...
- Android深入四大组件(八)广播的注册、发送和接收过程
前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...
- Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)
前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...
- Android的四大组件之Activity
Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...
- Android的四大组件
Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...
- Android开发四大组件概述
这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...
- Java乔晓松-android的四大组件之一Service(服务的绑定)
android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...
- Android深入四大组件(七)Service的绑定过程
前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大 ...
- Android之四大组件、六大布局、五大存储 总结
Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver. ...
随机推荐
- Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记
之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...
- 模拟Paxos算法及其简单学习总结
一.导读 Paxos算法的流程本身不算很难,但是其推导过程和证明比较难懂.在Paxos Made Simple[1]中虽然也用了尽量简化的流程来解释该算法,但其实还是比较抽象,而且有一些细节问题没有交 ...
- linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题
生产者消费者问题,又有界缓冲区问题.两个进程共享一个一个公共的固定大小的缓冲区.其中一个是生产者,将信息放入缓冲区,另一个是消费者,从缓冲区中取信息. 问题的关键在于缓冲区已满,而此时生产者还想往其中 ...
- 云如何让App开发更简单?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 互联网"下半场",移动App开发对于质量.速度的要求更加苛刻.4月初,腾讯云正式上线移动开发平台MobileLine,借 ...
- glut 深度测试无不起作用问题解决
OpenGL中使用glEnable(GL_DEPTH_TEST)后深度测试没有起作用,发现深度缓冲没有创建.glut库在兼容模式(GL_COMPATIBILITY_PROFILE)下displaymo ...
- 【实验吧】CTF_Web_简单的SQL注入之3
实验吧第二题 who are you? 很有意思,过两天好好分析写一下.简单的SQL注入之3也很有意思,适合做手工练习,详细分析见下. http://ctf5.shiyanbar.com/web/in ...
- poj 2417 && poj3243(Baby-Step Giant-Step)
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4624 Accepted: 2113 ...
- centos7安装nginx必要环境
安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行 , 在安装nginx前还要安装以下的环境包 一. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc ...
- django rest-framework 1.序列化 二
在上一节说了Serializers的使用类似Django的From,在Django中有From也有ModelFrom,Serializers也是有个ModelSerializers,下面在讲讲rest ...
- C++11的原子量与内存序浅析
一.多线程下共享变量的问题 在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况.比 ...