android安全机制(精选6篇)
篇1:android安全机制
Andoid安全机制包括两个层次:系统层和应用层。应用层的安全机制建立在授权与申请基础上,本文不讲。系统层的安全机制包括给每个用户进程分配单独的uid和gid,使用进程本身可以防止地址空间的共享,从而避免使用线程方式对数据的全局可见性。使用了uid则对于外存也加了封锁,当然这得感谢UNIX的用户空间机制。系统层安全机制还包括对设备访问的控制,在这个方面,Android的做法与传统有所不同。
Android除了给予用户进程以单独的uid外,给系统服务也分配了固定的uid,诸如system/core/include/private/android_filesystem_config.h文件中定义了这些固定的uid:
#define AID_SYSTEM1000
#define AID_RADIO1001
#define AID_BLUETOOTH1002
#define AID_GRAPHICS1003
#define AID_INPUT1004
#define AID_AUDIO1005
#define AID_CAMERA1006
#define AID_LOG1007
..........传统的做法是,出了root,其它全是普通用户,两类用户的权限在内核里是规定死的,这也保证了UNIX内核的安全性。比如dev目录下的设备文件,一般用户主是root,而且对其他用户不开放读写能力。用户使用设备一般通过系统调用如ioctl,而系统调用属于受信代码。
Android的问题是,引入的这些系统用户,实际上在权限方面是无法与普通uid区分的,如果系统用户能访问一个设备,那么一般用户也能。所以,Andoid没有别的选择,只能默认开启设备文件的全局读写。这在systemcore/init/device.c做了定义:
{ “/dev/urandom”,0666,AID_ROOT,AID_ROOT,0 },{ “/dev/ashmem”,0666,AID_ROOT,AID_ROOT,0 },{ “/dev/binder”,0666,AID_ROOT,AID_ROOT,0 },设备文件当然还是存放于/dev目录下,但dev目录的填充不是由udev做的,而是由Android的init进程做的。这个步骤由make_device函数完成,各个设备的权限来自于上述device.c文件的规定。
这种设备权限分配的潜在危险是,任何用户进程都可以操作设备,如果底层设备驱动有漏洞,那么整个系统的安全性就是存在风险的,而UNIX系统最大的安全隐患,正是来自于设备驱动。
篇2:android安全机制
广播事件处理机制是系统级别的,可以通过构建Intent 对象 然后调用sendBroadcast()方法将广播发出。事件的接受是通过定一个继承BroadcastReceiver的类来实现的,继承该类后覆盖onReceiver()方法,在该方法中响应事件。
以下内容包括:自己定义BroadcastReceiver来处理广播事件、系统广播事件的使用、Notification和NotificationManager的使用
1.自己定义BroadcastReceiver:
a.利用按钮点击发送广播 按钮的onClick()中:
…..// 定义一个Action常量
private static final String MY_ACTION = “com.hunsion.action.MY_ACTION”;// 此常量跟
中的属性相对应.
………
public void onClick(View v){
}
b.自定义BroadcastReceiver 如下:
继承至 BroadcastReceiver
public class MyReceiver extends BroadcastReceiver{
@Override//覆盖了onReceive方法 public void onReceive(Context cxt, Intent intent){// 从Intent中获得信息 // 实例化Intent对象 Intent intent = new Intent();// 设置Intent action属性 intent.setAction(MY_ACTION);// 为Intent添加附加信息 intent.putExtra(“msg”, “msg”);// 发出广播 sendBroadcast(intent);
}} String msg = intent.getStringExtra(“msg”);// 使用Toast显示 Toast.makeText(cxt, msg, Toast.LENGTH_LONG).show();
C 如果要使用系统广播事件
则同样要继承BroadcastReceiver 并覆盖onReceive()方法,这里不需要自己构建Intent对象 只是在
其中android.intent.action.BOOT_COMPLETED 指的是 系统启动完成的广播事件
常见的标准的广播Action常量:有
android.intent.action.BOOT_COMPLETED系统启动完成android.intent.action.ACTIOPN_TIME_CHANGED时间改变
android.intent.action.ACTIOPN_DATE_CHANGED系统日期改变
android.intent.action.ACTION_TIMEZONES_CHANGED时区改变
android.intent.action.ACTION_BATTERY_LOW电量低
android.intent.action.ACTION_MEDIA_EJECT插入或者播拔出外部媒体
android.intent.action.ACTION_MEDIA_BUTTON按下媒体按钮
android.intent.action.ACTION_PACKAGE_ADDED添加包
android.intent.action.ACTION_PACKEAGE_REMOVED删除包
2.使用Notification和NotificationManger 显示广播消息方法比较简单 一般先获得
NotificationManger,然后实例化Notification 设置其属性,通过
NotificationManger发送通知。
基本步骤为:
a.获得NotificationManager
private NotificationManager nm =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
b.实例化Notification对象
Notification n = new Notification();
// 设置显示图标,该图标会在状态栏显示
/*也可以通过这个构造方法来设置 Notification n = new
Notification(icon,tickertext,when);*/
int icon = n.icon = R.drawable.happy;
// 设置显示提示信息,该信息也会在状态栏显示
String tickerText = “aaaaaaa”;
// 显示时间
long when = System.currentTimeMillis();
n.icon = icon;
n.tickerText = tickerText;
n.when = when;
c.调用setLatestEventInfo()方法 在视图中(非状态栏)设置图标和时间。并发出通知、// 实例化Intent
Intent intent = new Intent(MainActivity.this, MainActivity.class);// 获得PendingIntent
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
// 设置事件信息
n.setLatestEventInfo(MainActivity.this, “My Title”, “My Content”, pi);// 发出通知
nm.notify(ID, n);
// ID 可以理解为给每个通知一个固定的编号,所以如果我们想取消某个通知。可以调用 nm.cancel(ID);
另:我们可以为Notification对象设置很多其他属性用来进行提示。例如:设置上声音。振动和闪光灯。
a.提示音:
n.defaults |=Notification.DEFAULT_SOUND;
n.sound = Uri.parse(“file:///sdcard/sound.mp3”);//本地声音
n.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,”6”);b.振动
n.defaults |=Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,50,100,150};
n.vibrate = vibrate;
c.闪光灯
n.defaults |=Notification.DEFAULT_LIGHTS;
n.ledARGB = 0xff00ff00
n.ledOnMS = 300;
n.ledOffMS = 1000;
篇3:Android系统安全机制研究
Android系统基于Linux内核, 采用了分层的体系结构, 自底向上分别是Linux内核、本地库、Android运行时环境、应用框架和应用程序共五层结构。Android的安全机制由三部分组成, 包括Linux内核, Android本地库和运行环境和应用程序框架。Android的安全机继承于传统的Linux和Dalvik虚拟机的安全机制, 同时还有Google设计的Android特有的安全机制。
一、Linux的安全机制
安装在Android系统中的每个程序都会被分配一个属于自己的统一的Linux用户ID, 即UID, 并明确相应的权限。UID在程序安装到系统的时候被分配, 并且在这个设备中保持它的永久性。另外, 该程序创建的任何文件都会被赋予程序的用户标识, 正常情况下不能被其它程序访问。而文件访问控制来源于Linux的权限控制机制, 权限是Android为保障安全而设定的安全标识, 同时也是程序实现某些特殊操作 (比如申请系统服务) 的基础。权限决定Android OS中用户或者程序执行的操作是否会被允许, 只有拥有相应的权限才能打开数据文件、发送信息和调用Android组件等。
应用程序的进程运行在一个安全的沙箱, 它不能干扰其它应用程序, 除非它明确声明权限可以添加原有沙箱不能提供的功能。
二、Android本地库和运行环境
Android是一个多进程系统, 每一个应用程序 (和系统的组成部分) 都运行在自己的进程中。通过内存管理单元, 对进程分配不同的虚拟内存空间, 进程只能访问自身分配的内存空间, 而不能访问其他进程所占用的内存空间。由于缓冲区溢出攻击通常是通过类型转换错误或者是缺少边界检查进行的, 为了防止这种情况出现, Android使用强制类型Java语言, Java语言可以通过编译期间的类型检查, 自动的存储管理, 数组的边界检查三种机制阻止变量被错误或不恰当的使用。同时, Android引用了认证, 授权和审计的AAA原则保证设备的安全。
三、应用程序框架
所有的Android应用程序 (.apk文件) 必须通过一个证书的签名, 此证书的私钥必须被开发者所掌握。这个证书的标识是应用程序的作者, 这个证书不需要通过证书组织的签署, 因为Android完全允许使用自签署的证书。这个证书仅仅被用于与应用程序建立信任关系, 而不是为了控制应用程序能否被安装。通过确定能够访问原始签名的权限和能够共享用户ID的签名才是影响安全的重要方面。
因此, 在Android的安全机制下, 安装在设备中的每一个Android应用程序 (.apk) 都会被分配一个属于自己的统一的UID, 并且为它创建一个沙箱以防止影响其它应用程序 (或者被其它应用程序影响) 。这就相当于给它的文件打上了安全保护“标签”, 只有通过这个标签才可对这个文件进行访问。也正是由于这种排它性的标识, 其它程序在没有系统授权的情况下, 都不能对这个文件进行访问和修改。如果一个程序在安装以后需要对其它程序的数据进行读取等操作, 系统将会在程序安装阶段审核它有无相应的权限, 这样就可以保证数据的完整性和机密性。
应用创建的任何文件都会被赋予应用的用户标识, 并且在正常情况下不能被其它应用访问。一个基本的Android应用程序如果没有与其相关联的权限, 则意味着它不能做任何影响用户体验或设备中的数据的有害操作。因为系统的保护特性, 在应用程序需要时, 必须在AndroidManifest.xml文件中包含一个或更多的
例如:一个应用程序要监听来自SMS的消息, 则需要指定如下内容:
篇4:android安全机制
关键词:Android;异步机制;移动投票
中图分类号:TP391 文献标识码:A 文章编号:1674-7712 (2012) 06-0093-01
在省级项目《吉林地区大学生网络应用状况的研究与对策》的调研过程中,发现在大学生中,智能手机的应用已经相当普遍。智能手机以其功能强大丰富和小巧易携等优点,已经超越了简单通讯工具的范畴,很多学生通过智能手机进行沟通交流、学习和娱乐,智能手机已经成为广大学生的不可或缺的贴身伴侣。在对学生的网络应用状况进行调查的时候,项目组认识到通过手机进行调查,将能够更加方便的让学生进行投票,也能够更加容易的获得调查结果,因此项目组决定尝试开发基于Android智能手机的移动投票系统,作为最新的数据统计渠道。
Android系统的市场占有率达70%以上,在大学生中更是首选,基于Android系统的移动投票系统,基本可以覆盖大部分的学生。为了避免因为移动网络带宽有限,而导致大量学生同时投票时,出现网络访问不畅、无法投票和无法实时查看投票结果的情况,应在投票系统中采用异步处理机制,以保证投票的实时性和准确性。在Android中提供了专门的AsynTask类进行异步处理,Asyntask机制简单易用,它将所有的线程通信都封装成回调函数,调用逻辑清晰,尤其是在异步处理结束之后,有回调函数进行收尾处理,方便进行结果的统计和输出。本文将通过实例对Android系统的AsynTask类的一部处理机制进行深入分析,以便更好的应用于移动投票系统。
一、AsynTask类的结构
AsynTask类直接继承自java.lang.object类,主要用到的几个内部回调函数有:doInBackGround()、onPreExecute()、onPostExecute()和onProgressUpdate(),正是这几个回调函数构成了AsynTask类的使用逻辑结构。
二、回调逻辑关系
1.主线程调用AsynTask子类实例的execute()方法后,首先会调用onPreExecute()方法。
2.之后启动新线程,调用doInBackground()方法,进行异步数据处理。
3.处理完毕之后异步线程结束,在主线程中调用onPostExecute()方法。
三、各个函数间数据的传递
其数据传递关系如下:
由execute()方法向doInBackground()传递,doInBackground()方法的返回值会传递给onPostExecute()方法。publishProgress()方法向progressUpdate()方法传递。
传递的数据的类型应该为数组,数组都是可变长的,应根据具体情况使用。
四、AsynTask机制的java实现代码
public class AnsyTestActivity extends Activity {
TextView text =null;
Button button=null;
String str=null;
AnsyTry anys=null;
double result=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text=(TextView) findViewById(R.id.text);
button=(Button) findViewById(R.id.button);
str="wei";
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
anys=new AnsyTry(text);
anys.execute(str); } }); }
class AnsyTry extends AsyncTask
TextView te=null;
public AnsyTry(TextView te) {
super();
this.te = te; }
@Override
protected Double doInBackground(String... params) {
double dou=0;
if(params[0].equals("wei")){
System.out.println(Thread.currentThread().getName()+"recive wei");
dou=100; }
publishProgress(te);
return dou; } }}
通過AsynTask异步机制的应用,移动投票系统在应用中表现良好。在接受学生集中投票和实时统计分析的数据高峰期,AsynTask异步机制很好的将投票和查看统计结果的功能,分配给不同的线程,从而避免了网络堵塞情况的发生,保证了投票数据的及时性和准确性。
参考文献
[1]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社
篇5:android安全机制
要理解listview等的实现,其父类是不得不看。源码有1200多行。阅读完AdapterView,能搞明白以下问题
响应数据的更改。
(793 - 842)
知道点击view的时候,获得对应的位置.
(593 - 615)
响应数据的更改
这里假设你已经打开了AdpaterView的 793 到 842 行。。
在我刚开始用adapterview 的时候,最让我费劲的就是,为什么我调用adpater 的 notifyDataSetChanged 就能更新view 的状态了呢,然后跟调用notifyDataSetInvalidated() 两者之间又有什么区别呢?以前,找了一下资料,没找到很详细的说明,现在从源码里面找答案的话,就很清晰了。
首先,我们要明白一种设计模式:观察者设计模式。
我相信你,应该能明白观察者模式是个什么样的实现了。。。
AdapterView 之所以能对Adapter 的数据更新进行响应,就是因为其在Adapter上注册了一个数据观察者(AdapterDataSetObserver(793 - 842 ))的内部类,所以,我们只要对adpater 状态的改变发送一个通知,就能让AdapterView调用相应的方法了。
DataSetObservable 的源码,记得要把其父类也看了。github.com/android/platformframeworksbase/blob/master/core/java/android/database/DataSetObservable.java
现在我们就能解决我们一开始的疑问notifyDataSetChanged() 与notifyDataSetInvalidated() 具体回到AdapterView 产生什么影响?
我们对比一下onChange()与onInvalidated()方法,就能对比得出,前者会对当前位置的状态进行同步,而后者会重置所有位置的状态,
电脑资料
从代码的注释里面还可以获取得到更多的信息。
这样,我们以后调用notifyDataSetChanged()和notifyDataSetInvalidated() 就更加明白会发生什么情况了。
点击item 怎么能够获取到当前的位置
这里假设你已经打开了AdpaterView的 593 - 615 行。。
对于getPositionForView()这个方法,你肯定没用过,要搞明白为什么我们能够获取到adapterView 里面item view对应的位置,我们需要看其直接子类:AbsListView.class
源码相关:(2130-2197) (2196 - 2279)
这里又用到一种设计模式:委托模式
假设你已经搞懂委托模式的概念,首先我们来看源码(2130 - 2197)。
从obtainView()方法名中我们可以知道,这是一个用于生成itemView的方法。把这块代码看完,以后,会不会有个疑问呢(先不用管回收那块)?position到哪里了?我们可以看到这个方法实际上并没有对我们的itemview 设置了任何的 ,那为什么最后能对我们的itemview的动作进行反应呢?
接下来我们看:源码(2196 - 2279)
从代码里面我们可以看出这是一个委托类,对item 的动作进行初始化,以及响应对应的操作,从源码里面我们可以获知得到,一个item view 为什么能对click,longclick,select 动作进行响应,然后,通过调用performItemClick()最终把事件调用到AdapterView(292-303)的performItemClick()里面的 方法.
篇6:Android安全性问题总结
本地SharedPreferences保存信息要加密
统一日志输出开关控制(开发测试日志输出打开,版本正式上线日志输入关闭)正式包需要混淆打包
app与服务器交互接口参数以及返回数据需要进行数据加密 app与服务器交互接口需要有token过期失效机制 声明适当的manifest权限
相关文章:
android移动开发答案01-06
android面试题目01-06
android项目心得01-06
Android Activity 详述01-06
Android终端01-06
Android客户端01-06
android程序报告01-06
android横竖屏总结01-06
android开发环境简介01-06
Android测试01-06