JAVA网站制作之深切安卓Package Manager和Package Installer仓酷云
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)我们天天都在安装和卸载APK(安卓使用程序包文件),也许一天会有好几回,可是你有想过上面成绩吗?[*]甚么是PackageManager(保证理器)和PackageInstaller(程序安装包)?
[*]APK文件保留在Android的哪一个中央?
[*]APK文件安装历程的细节是如何的?
[*]PackageManager(保证理器)是如何保留数据的?
[*]我应当往那里找PackageManager和PackageInstaller的源码?
1、甚么是PackageManager和PackageInstaller
PackageInstaller是安卓上默许的使用程序,用它来交互式地安装一般包文件。PackageInstaller供应了用户界面来办理使用大概包文件。PackageInstaller挪用一个叫InstallAppProgress的activity来猎取用户收回的指令。InstallAppProgress会哀求PackageManager服务,然后经由过程indalld来安装包文件。源码供应在/packages/apps/PackageInstaller上。
Installd这个体系保卫程序的主要脚色是猎取来自PackageManager服务的哀求,而该哀求是经由过程Linux套接字/dev/socket/installed取得的。
Installd利用办理员权限实行一系列的步骤来安装APK。参考:commands.c
PackageManger是一个实践上办理使用程序安装、卸载和晋级的API。当我们安装APK文件时,PackageManager会剖析APK包文件和显现确认信息。当我们点击OK按钮后,PackageManger会挪用一个叫“InstallPackage”的办法,这个办法有四个参数,也就是uri、installFlags、observer和installPackagename。PackageManger会启动一个叫“package”的service(服务),如今一切含混的工具会产生在这个service中。你能够在PackageInstaller源码中检察“PackageInstallAcitivity.java”和“InstallAppProgress.java”。PackageManger服务运转在体系服务历程中,而安装保卫程序(installd)作为一个当地历程运转着,他们都在体系启动时入手下手运转。
2、APK文件保留在Android的哪一个中央?
[*]预装程序(即相机,日历和扫瞄器等)保留在/system/app/中。
[*]用户安装程序(APIDemo,Any.do等)保留在/data/app/中。
[*]PackageManager创立数据目次/data/data//来保留数据库、sharedpreference、当地函数库弛缓存数据。
你大概会看到apk文件和统一个APK的*.odex文件,而ODEX文件是完整分歧的会商和目标了。
3、APK文件安装历程的细节是如何的?
上面的历程实行在PackageManger服务中。
[*]守候;
[*]增加一个包文件到安装历程的行列中;
[*]断定符合的中央来安装包文件;
[*]复制apk文件到一个给定的目次下;
[*]断定使用的UID;
[*]哀求installd保卫程序历程;
[*]创立使用目次和设置权限;
[*]提取dex代码到缓存目次中;
[*]剖析packages.list、system、data和packages.xml的最新形态;
[*]向体系发送播送动静,动静带有安装完效果果的名字Intent.ACTION_PACKAGE_ADDED:假如是更新,会带有新的(Intent.ACTION_PACKAGE_REPLACED)。
4、PackageManager(保证理器)是如何保留数据的?
PackageManager保留使用程序的信息在/data/system目次下的三个文件里。上面的例子是从Android4ICS(IceCreamSandwich)摹拟器提掏出来的图片。
1.packages.xml:这个文件包括一切的权限和Packages/Applications。
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<packages>
<last-platform-versionexternal="15"internal="15">
<permission-trees>
<permissions>
<itemname="android.permission.CHANGE_WIFI_MULTICAST_STATE"package="android"protection="1">
<itemname="android.permission.CLEAR_APP_USER_DATA"package="android"protection="2">
.
.
.
.
</item></item></permissions>
<p><packagecodepath="/system/app/Contacts.apk"flags="1"ft="136567b3990"it="136567b3990"name="com.android.contacts"nativelibrarypath= 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 是一种使网页(Web Page)产生生动活泼画面的语言 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
页:
[1]