转至http://space.itpub.net/21255398/viewspace-605619
理论基础
<使用预置安装工具
Android系统中,应用安装包.apk文件属于默认支持的文件类型,它的的mime type被定义为"application/vnd.android.package-archive"。
系统内置了安装工具来解析并安装.apk文件。你可以从OPhone平台的文件管理器中找到对应安装包,点击即可启动安装步骤。这里给出了相应的代码,有兴趣的开发者可以尝试使用。
Intent apkintent = new Intent(Intent.ACTION_VIEW);
final Uri puri = Uri.fromFile(new File(path)); //path is the path of source apk
apkintent.setDataAndType(puri, "application/vnd.android.package-archive");
startActivity(apkintent);
使用API安装
Android系统提供了安装应用的API:PackageManager.installPackage(final Uri packageURI,
final IPackageInstallObserver observer, final int flags);
uri给出了原文件的地址
observer实现了回调函数packageInstalled(final String packageArchiveName, final int returnCode) 以检查安装是否成功
flags提供安装标识。Android平台提供的标识有:
1.PackageManager.FORWARD_LOCK_PACKAGE = 0x00000001
标识本应用属于受限应用,应用将会被安装到保护目录,只有该应用可以访问代码段和不属于resource的asset资源。
2.PackageManager.REPLACE_EXISTING_PACKAGE = 0x00000002;
应用如已存在,则先删除再安装。
3.PackageManager.SDCARD_PACKAGE = 0x00000004;
由OPhone平台扩展,标识该应用安装目录为存储卡,默认为data分区。
因为手机中data分区大小有限,因此OPhone平台默认将应用装到存储卡上。
本API需要"android.permission.INSTALL_PACKAGES"权限,该权限属于签名级别,因此只有系统级别的应用程序才能使用。
拷贝即安装
Android支持拷贝即安装的方式,即将安装包拷贝到预置安装目录即可自动安装,但所有的预置目录对于用户不可见。
OPhone平台扩展后,用户可将安装包拷入存储卡的app目录下,系统将监控该文件夹,检测到新的安装文件后自动安装。
这种方式适合一次安装大量应用,但是也有坏处。一是无法知道哪些应用安装成功,哪些安装失败, 二是安装失败的应用将会作为垃圾存放在预置目录中,在系统启动时延长启动时间,三是过多的应用可能将data分区的空间占用过多,影响系统的正常使用。
安装步骤
解析安装包是否合法,如果合法即加载应用,如果非法即放弃安装
取出代码段,放入/data/dalvik-cache目录
建立/data/data/包名的文件夹,以存放用户数据
将安装包携带的lib放入/data/data/包名/lib中
以上步骤完成后将安装包拷到安装目录
加载该应用信息
应用卸载
Android系统同样支持多种卸载方式。
使用预置卸载工具
系统内置了卸载工具。这里给出了启动代码,执行后即可看到卸载步骤:
Uri packageURI = Uri.parse("package:"+packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
使用API卸载
Android提供了卸载应用的标准API:PackageManager().deletePackage(String packageName, IPackageDeleteObserver observer, int flags);
observer实现了回调函数packageDeleted(boolean succeeded)以检查卸载是否成功
flags提供卸载标识。Android平台提供的标识有
PackageManager.DONT_DELETE_DATA = 0x00000001;
标识卸载时是否同时删除用户数据。
本API需要"android.permission.DELETE_PACKAGES"权限,该权限属于签名级别,因此只有系统级别的应用程序才能使用。
删除即卸载
对应于拷贝即安装,系统同样支持删除即卸载功能。当用户删除/sdcard/app目录下安装包时,系统将自动检测到删除事件并卸载对应应用。
本方法适合一次删除大量应用。
卸载步骤
删除代码段
如果需要删除用户数据,则删除
建立/data/data/包名的文件夹,以存放用户数据
删除应用信息
删除安装包
信息管理
Android应用的相关信息在AndroidManifest.xml文件中定义,前面已经介绍,信息管理的第一步就是加载信息。
系统启动时,将根据安装目录的不同,先后对已安装应用进行信息加载;系统启动后,运行时安装的应用,在安装成功后进行信息加载。
系统中所有信息加载后,在system service进程(Android应用的核心进程,存放了几乎所有的系统service和核心数据结构)中形成了对应数据结构:
permission数据:应用申请的使用权限在此存放,标识了哪些应用有哪些权限。
application数据:每一个应用生成一个application数据,标识了application模块的各种属性和源文件/用户数据的路径。
providers数据:存放了所有的provider及其属性
receiver数据:存放所有receiver及其属性
service数据:存放所有service及其属性
activity数据:存放所有的activity及其属性。
应用调度
应用调度既所有应用的运行时管理,是建立在信息管理之上的。根据运行时模块的静态信息,系统可以进行模块加载和管理。
根据application信息,可以得知哪些应用是常驻内存应用,哪些应用是动态加载的应用
根据provider信息,可以得知哪些provider是系统级的,哪些是应用级别的,哪些是公开的,哪些是内不得
根据activity信息,可以获得目标UI来处理用户请求
根据receiver信息,可以得知哪些消息可以被处理
去激活与激活状态
系统启动时,应用信息会被加载,而应用未被启动,此时所有应用处于去激活状态。系统启动完成时,常驻内存应用将被启动,这些应用在系统运行中始终处 于激活状态。对于其他应用,当运行时模块(activity,service,receiver,provider等)被调度时,应用将会激活。
对于所有已激活的应用,系统将之纳入进程管理和内存管理。进程管理将缓存应用运行时数据和状态,当应用因非正常原因被杀掉后,将有机会在重启后恢复 原来状态。系统内存不足时,加通过杀掉非常驻内存应用来释放内存,其优先级为空闲应用>后台应用(即有后台UI)>前台应用(即有UI在前 台)。
当应用所在进程被杀掉后,应用重新回到去激活状态。
应用使用的API
Android系统为应用管理功能提供了大量的API。根据功能的不同,这些API分为两大类:PackageManager相关和ActivitManager相关。
PackageManager相关
本类API是对所有基于加载信息的数据结构的封装,包括以下功能:
安装,卸载应用
查询permission相关信息
查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
查询已安装应用
增加,删除permission
清除用户数据、缓存,代码段等
非查询相关的API需要特定的权限,具体的API请参考SDK文档。
ActivityManager相关
本类API是对运行时管理功能和运行时数据结构的封装,包括以下功能
激活/去激活activity
注册/取消注册动态接受intent
发送/取消发送intent
activity生命周期管理(暂停,恢复,停止,销毁等)
activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询)
激活/去激活service
激活/去激活provider等
task管理相关API需要特定的权限,具体API可参考SDK文档。
分享到:
相关推荐
主要信息可能包括应用的名称、图标、版本号等基本信息,这些信息可以从AndroidManifest.xml文件中获取,该文件是每个Android应用的核心配置文件。详细信息可能涉及权限、安装日期、占用空间等,这些信息则可以通过...
Android应用程序在运行的时候,资源管理器AssetManager和Resources会根据当前的机器设置,即屏幕大小、密度、方向,以及国家、地区语言的信息,查找正确的资源,并且进行解析,最后将它们渲染在UI上。这个PPT讲...
1. **Android应用程序框架**:Android系统基于Linux内核,其应用程序框架提供了丰富的API接口,使得开发者可以方便地创建和管理应用。此项目利用了这些API来实现应用管理功能。 2. **ActivityManagerService**:...
通过这个项目,初学者不仅可以学习到Android Studio的使用,还能深入理解Android应用的架构设计、UI布局、网络编程、数据存储、多线程和异步处理、权限管理等多个核心知识点。此外,还可以接触到Android的生命周期、...
在本资源"android应用锁的实现"中,我们可能找到一个简单实现这一功能的示例代码。以下是关于Android应用锁实现的一些关键知识点: 1. **权限管理**:在Android系统中,为了实现应用锁,首先需要获取相应的权限。...
通过这个源码分析,我们可以深入了解Android应用的生命周期、权限管理、UI设计、数据存储以及与系统服务的交互等多个方面。以下是对"Android应用源码之软件管理器.zip"中可能涉及的关键知识点的详细说明: 1. **...
Android应用源码11套安卓源码合集: Android Gps日志记录程序源码.rar Android listview 滑动删除(具体效果360手机卫士后台通知).rar Android MP3播放器,带卡拉OK字幕.rar Android “遇见”android应用源码.rar ...
《Android应用程序开发(第三版)》是由王向辉、张国印、沈洁三位专家编著的教材,这本书深入浅出地介绍了Android平台上的应用开发技术。课件源程序是学习此书的重要辅助资料,提供了丰富的实例和练习,帮助读者更好...
在Android系统上开发一款日程管理应用是一项涉及多个技术领域的工作。这个项目主要涵盖了数据库操作、闹钟提醒机制以及用户界面的设计与交互。...通过这样的项目,可以深入学习并掌握Android应用开发的核心技能。
本文将深入探讨如何利用Android应用源码实现这一功能。 首先,要管理U盘,我们需要了解Android对USB设备的支持。从Android 3.1版本开始,引入了USB主机模式(USB Host Mode),允许Android设备作为USB主机连接外部...
Android手机应用管理源码,一个安卓手机上的应用管理程序,附有完整的源代码,Android的环境真不好调啊,没抓到运行截图,Android达人自己下载源码摸索吧,这个软件不但可以却手机上的应用进行管理,还具备进程管理...
在Android系统中,应用管理是核心功能之一,它涉及到应用程序的安装、卸载、更新、权限控制等多个方面。本文将深入解析"android应用管理源码"中的关键知识点,帮助开发者理解Android系统的内部运作机制。 首先,...
Android应用案例开发大全...详细介绍了3D动态壁纸、LBS类应用、导航与百度地图二次开发、理财类应用、餐饮行业应用、校园辅助应用、音乐休闲应用、新闻发布管理应用、休闲益智类3D/2D游戏等各类Android应用程序的开发。
《Android应用开发完全自学手册》是一本全面介绍Android应用开发的指南,涵盖了从基础到进阶的各个环节。这本书旨在帮助初学者系统地学习并掌握Android应用的开发技能,通过源代码解析来提升实践能力。 第1章:...
SDK(Software Development Kit)包含了开发Android应用所需的各种工具,如SDK Manager用于下载和管理Android平台版本、工具和库,AVD Manager创建和管理虚拟设备,以及adb(Android Debug Bridge)用于设备通信和...
悬浮窗,大家应该也不陌生,凌驾于应用之上的一个小弹窗,实现上很简单,就是添加一个系统级别的窗口,Android中通过WindowManagerService( WMS)来管理所有的窗口,对于WMS来说,管你是Activity、Toast、Dialog,...
根据提供的信息,我们可以推断出《Android应用开发揭秘》这本书主要涵盖了Android应用程序的开发流程及相关技术,适合初学者作为入门指南。尽管具体内容未给出详细章节或摘要,但基于标题、描述及常见Android开发...
宠物管理Android应用程序后端基于SSM实现宠物管理Android应用程序后端基于SSM实现宠物管理Android应用程序后端基于SSM实现宠物管理Android应用程序后端基于SSM实现宠物管理Android应用程序后端基于SSM实现宠物管理...
1. **环境搭建**:开发Android应用首先需要安装Android Studio,它是Google提供的官方集成开发环境(IDE),包含了SDK Manager、AVD Manager等工具,用于下载和管理Android SDK组件以及创建虚拟设备进行测试。...