精华内容
下载资源
问答
  • 我们每天都安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗? 什么是Package Manager(包管理器)和Package Installer(程序安装包)?APK文件保存Android的哪个地方?APK...

    我们每天都在安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗?

    1. 什么是Package Manager(包管理器)和Package Installer(程序安装包)?
    2. APK文件保存在Android的哪个地方?
    3. APK文件安装过程的细节是怎样的?
    4. Package Manager(包管理器)是怎样保存数据的?
    5. 我应该去哪里找Package Manager和Package Installer的源码?

    1、什么是Package Manager和Package Installer

    PackageInstaller是安卓上默认的应用程序,用它来交互式地安装普通包文件。PackageInstaller提供了用户界面来管理应用或者包文件。PackageInstaller调用一个叫InstallAppProgress的activity来获取用户发出的指令。InstallAppProgress会请求Package Manager服务,然后通过indalld来安装包文件。源码提供在/packages/apps/PackageInstaller上。

    Installd这个系统守护程序的首要角色是获取来自Package Manager服务的请求,而该请求是通过Linux套接字/dev/socket/installed获得的。
    Installd使用管理员权限执行一系列的步骤来安装APK。参考:commands.c

    Package Manger是一个实际上管理应用程序安装、卸载和升级的API。当我们安装APK文件时,Package Manager会解析APK包文件和显示确认信息。当我们点击OK按钮后,Package Manger会调用一个叫“InstallPackage”的方法,这个方法有四个参数,也就是uri、installFlags、observer和installPackagename。Package Manger会启动一个叫“package”的service(服务),现在所有模糊的东西会发生在这个service中。你可以在PackageInstaller源码中查看“PackageInstallAcitivity.java”和“InstallAppProgress.java”。Package Manger服务运行在系统服务进程中,而安装守护程序(installd)作为一个本地进程运行着,他们都在系统启动时开始运行。

    2、APK文件保存在Android的哪个地方?

    1. 预装程序(即相机,日历和浏览器等)保存在/system/app/中。
    2. 用户安装程序(APIDemo,Any.do等)保存在/data/app/中。
    3. Package Manager创建数据目录/data/data//来保存数据库、shared preference、本地函数库和缓存数据。

    你可能会看到apk文件和同一个APK的*.odex文件,而ODEX文件是完全不同的讨论和目的了。

    3、APK文件安装过程的细节是怎样的?

    下面的过程执行在Package Manger服务中。

    • 等待;
    • 添加一个包文件到安装进程的队列中;
    • 确定合适的地方来安装包文件;
    • 复制apk文件到一个给定的目录下;
    • 确定应用的UID;
    • 请求installd守护程序进程;
    • 创建应用目录和设置权限;
    • 提取dex代码到缓存目录中;
    • 解析packages.list、system、data和packages.xml的最新状态;
    • 向系统发送广播消息,消息带有安装完成效果的名字Intent.ACTION_PACKAGE_ADDED:如果是更新,会带有新的(Intent.ACTION_PACKAGE_REPLACED)。

    Package Installer

    4、Package Manager(包管理器)是怎样保存数据的?

    Package Manager保存应用程序的信息在/data/system目录下的三个文件里。下面的例子是从Android 4 ICS(Ice Cream Sandwich)模拟器提取出来的图片。

    1. packages.xml:这个文件包含所有的权限和Packages/Applications。

    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-version external="15" internal="15">
    <permission-trees>
    <permissions>
    <item name="android.permission.CHANGE_WIFI_MULTICAST_STATE" package="android" protection="1">
    <item name="android.permission.CLEAR_APP_USER_DATA" package="android" protection="2">
    .
    .
    .
    .
    </item></item></permissions>
     
    <package codepath="/system/app/Contacts.apk" flags="1" ft="136567b3990" it="136567b3990" name="com.android.contacts" nativelibrarypath="/data/data/com.android.contacts/lib" shareduserid="10001" ut="136567b3990" version="15">
    <sigs count="1">
    <cert index="2">
    </cert></sigs>
    </package>
    .
    .
    .
    .
    <package codepath="/data/app/com.project.t2i-2.apk" flags="0" ft="13a837c2068" it="13a83704ea3" name="com.project.t2i" nativelibrarypath="/data/data/com.project.t2i/lib" userid="10040" ut="13a837c2ecb" version="1">
    <sigs count="1">
    <cert index="3" key="308201e53082014ea0030201020204506825ae300d06092a86
    4886f70d01010505003037310b30090603550406130255533110300e060355040a13074
    16e64726f6964311630140603550403130d416e64726f6964204465627567301e170d31
    32303933303130353735305a170d3432303932333130353735305a3037310b300906035
    50406130255533110300e060355040a1307416e64726f6964311630140603550403130d
    416e64726f696420446562756730819f300d06092a864886f70d010101050003818d003
    08189028181009ce1c5fd64db794fd787887e8a2dccf6798ddd2fd6e1d8ab04cd8cdd9e
    bf721fb3ed6be1d67c55ce729b1e1d32b200cbcfc91c798ef056bc9b2cbc66a396aed6b
    a3629a18e4839353314252811412202500f11a11c3bf4eb41b2a8747c3c791c89391443
    39036345b15b5e080469ac5f536fd9edffcd52dcbdf88cf43c580abd0203010001300d0
    6092a864886f70d01010505000381810071fa013b4560f16640ed261262f32085a51fca
    63fa6c5c46fde9a862b56b6d6f17dd49643086a39a06314426ba9a38b784601197246f8
    d568e349a93bc6af315455de7a8923f40d4051a51e1658ee34aca41494ab94ce978ae38
    609803dfb3004806634e6e78dd0be26fe75843958711935ffc85f9fcf81523ce23c86bc
    c5c7a">
    </cert></sigs>
    <perms>
    <item name="android.permission.WRITE_EXTERNAL_STORAGE">
    </item></perms>
    </package>
    .
    .
    .
    .
    .
    </permission-trees></last-platform-version></packages>

    这个xml文件包含两种信息,权限和package(application)。 权限是保存在标签里的。每个Permission(权限)有三个属性,即name、package和protection。Name属性包含权限的名字,也就是我们在AndroidManifest.xml所用的,Package属性表明权限所属的包。在大多数情况下,“android”是一个值,因为标签包含默认的权限,以及protection表明安全的等级。

    package标签包含10个属性和一些子标签。

    Sr 属性 描述
    1 name 包名
    2 codePath APK文件安装路径(/system/app/ 或 /data/app/)
    3 nativeLibraryPath 本地函数库(*.so文件),默认路径/data/data/<package name>/lib/
    4 flag 存储ApplicationInfo标记[http://developer.android.com/reference/android/content/pm/ApplicationInfo.html](http://developer.android.com/reference/android/content/pm/ApplicationInfo.html)
    5 ft 十六进制时间戳timestamp
    6 lt 首次安装十六进制时间戳
    7 ut 最后更新十六进制时间戳
    8 version AndroidManifest.xml文件中的版本代码
    [http://developer.android.com/guide/topics/manifest/manifest-element.html#vcode]
    9 sharedUserId Linux用户ID名称,其他应用可查看此ID。与在AndroidManifest.xml中的定义一致[http://developer.android.com/guide/topics/manifest/manifest-element.html#uid]
    10 userId Linux用户ID名称

    子标签

    • sigs 签名信息,count属性代表cert标签的数量。
    • cert 包含证书的key,index属性代表证书的全局索引,当新的证书安装时,我发现index会随着增加。
    • perms 包含开发者已经在AndroidManifest.xml中设置好的权限。

    2. packages.list: 这是一个简单的文本文件,包含了包名、用户id、flag和数据目录,我找不到更加完美的描述了,但是我设想它可提供更快速的已安装包的查找,因为这个文件一直只保存重要的信息。

    1
    2
    3
    4
    com.android.launcher 10013 0 /data/data/com.android.launcher
    com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
    com.android.contacts 10001 0 /data/data/com.android.contacts
    com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin

    3.packages-stoped.xml:这个文件包含了已经是停止状态的包的列表,停止状态的应用是不能接收任何的广播的。参考这个链接来了解更多关于停止状态应用的信息。http://yuki312.blogspot.in/2012/03/androidbroadcaststop.html

    1
    2
    3
    4
    5
    6
    <stopped-packages>
    <pkg name="com.android.widgetpreview" nl="1"></pkg>
    <pkg name="com.example.android.livecubes" nl="1"></pkg>
    <pkg name="com.android.gesture.builder" nl="1"></pkg>
    <pkg name="com.example.android.softkeyboard" nl="1"></pkg>
    </stopped-packages>

    5、去哪里可以找到Package Manager和Package Installer的源码?

    Package Manger
    frameworks/base/services/java/com/android/server/pm/Settings.java
    frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
    frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
    frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
    frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
    frameworks/services/java/com/android/server/PreferredComponent.java
    frameworks/core/java/android/content/IntentFilter.java
    frameworks/base/core/java/android/content/pm/PackageParser.java
    frameworks/base/services/java/com/android/server/pm/Installer.java
    frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
    frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java

    Package Installer
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java

    展开全文
  • 我们每天都安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗? 什么是Package Manager(包管理器)和Package Installer(程序安装包)? APK文件保存Android的哪个地方...

    我们每天都在安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗?

    1. 什么是Package Manager(包管理器)和Package Installer(程序安装包)?
    2. APK文件保存在Android的哪个地方?
    3. APK文件安装过程的细节是怎样的?
    4. Package Manager(包管理器)是怎样保存数据的?
    5. 我应该去哪里找Package Manager和Package Installer的源码?

    1、什么是Package Manager和Package Installer

    PackageInstaller是安卓上默认的应用程序,用它来交互式地安装普通包文件。PackageInstaller提供了用户界面来管理应用或者包文件。PackageInstaller调用一个叫InstallAppProgress的activity来获取用户发出的指令。InstallAppProgress会请求Package Manager服务,然后通过indalld来安装包文件。源码提供在/packages/apps/PackageInstaller上。

    Installd这个系统守护程序的首要角色是获取来自Package Manager服务的请求,而该请求是通过Linux套接字/dev/socket/installed获得的。
    Installd使用管理员权限执行一系列的步骤来安装APK。参考:commands.c

    Package Manger是一个实际上管理应用程序安装、卸载和升级的API。当我们安装APK文件时,Package Manager会解析APK包文件和显示确认信息。当我们点击OK按钮后,Package Manger会调用一个叫“InstallPackage”的方法,这个方法有四个参数,也就是uri、installFlags、observer和installPackagename。Package Manger会启动一个叫“package”的service(服务),现在所有模糊的东西会发生在这个service中。你可以在PackageInstaller源码中查看“PackageInstallAcitivity.java”和“InstallAppProgress.java”。Package Manger服务运行在系统服务进程中,而安装守护程序(installd)作为一个本地进程运行着,他们都在系统启动时开始运行。

    2、APK文件保存在Android的哪个地方?

    1. 预装程序(即相机,日历和浏览器等)保存在/system/app/中。
    2. 用户安装程序(APIDemo,Any.do等)保存在/data/app/中。
    3. Package Manager创建数据目录/data/data//来保存数据库、shared preference、本地函数库和缓存数据。

    你可能会看到apk文件和同一个APK的*.odex文件,而ODEX文件是完全不同的讨论和目的了。

    3、APK文件安装过程的细节是怎样的?

    下面的过程执行在Package Manger服务中。

    • 等待;
    • 添加一个包文件到安装进程的队列中;
    • 确定合适的地方来安装包文件;
    • 复制apk文件到一个给定的目录下;
    • 确定应用的UID;
    • 请求installd守护程序进程;
    • 创建应用目录和设置权限;
    • 提取dex代码到缓存目录中;
    • 解析packages.list、system、data和packages.xml的最新状态;
    • 向系统发送广播消息,消息带有安装完成效果的名字Intent.ACTION_PACKAGE_ADDED:如果是更新,会带有新的(Intent.ACTION_PACKAGE_REPLACED)。

    Package Installer

    4、Package Manager(包管理器)是怎样保存数据的?

    Package Manager保存应用程序的信息在/data/system目录下的三个文件里。下面的例子是从Android 4 ICS(Ice Cream Sandwich)模拟器提取出来的图片。

    1. packages.xml:这个文件包含所有的权限和Packages/Applications。

    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-version external="15" internal="15">
    <permission-trees>
    <permissions>
    <item name="android.permission.CHANGE_WIFI_MULTICAST_STATE" package="android" protection="1">
    <item name="android.permission.CLEAR_APP_USER_DATA" package="android" protection="2">
    .
    .
    .
    .
    </item></item></permissions>
     
    <package codepath="/system/app/Contacts.apk" flags="1" ft="136567b3990" it="136567b3990" name="com.android.contacts" nativelibrarypath="/data/data/com.android.contacts/lib" shareduserid="10001" ut="136567b3990" version="15">
    <sigs count="1">
    <cert index="2">
    </cert></sigs>
    </package>
    .
    .
    .
    .
    <package codepath="/data/app/com.project.t2i-2.apk" flags="0" ft="13a837c2068" it="13a83704ea3" name="com.project.t2i" nativelibrarypath="/data/data/com.project.t2i/lib" userid="10040" ut="13a837c2ecb" version="1">
    <sigs count="1">
    <cert index="3" key="308201e53082014ea0030201020204506825ae300d06092a86
    4886f70d01010505003037310b30090603550406130255533110300e060355040a13074
    16e64726f6964311630140603550403130d416e64726f6964204465627567301e170d31
    32303933303130353735305a170d3432303932333130353735305a3037310b300906035
    50406130255533110300e060355040a1307416e64726f6964311630140603550403130d
    416e64726f696420446562756730819f300d06092a864886f70d010101050003818d003
    08189028181009ce1c5fd64db794fd787887e8a2dccf6798ddd2fd6e1d8ab04cd8cdd9e
    bf721fb3ed6be1d67c55ce729b1e1d32b200cbcfc91c798ef056bc9b2cbc66a396aed6b
    a3629a18e4839353314252811412202500f11a11c3bf4eb41b2a8747c3c791c89391443
    39036345b15b5e080469ac5f536fd9edffcd52dcbdf88cf43c580abd0203010001300d0
    6092a864886f70d01010505000381810071fa013b4560f16640ed261262f32085a51fca
    63fa6c5c46fde9a862b56b6d6f17dd49643086a39a06314426ba9a38b784601197246f8
    d568e349a93bc6af315455de7a8923f40d4051a51e1658ee34aca41494ab94ce978ae38
    609803dfb3004806634e6e78dd0be26fe75843958711935ffc85f9fcf81523ce23c86bc
    c5c7a">
    </cert></sigs>
    <perms>
    <item name="android.permission.WRITE_EXTERNAL_STORAGE">
    </item></perms>
    </package>
    .
    .
    .
    .
    .
    </permission-trees></last-platform-version></packages>

    这个xml文件包含两种信息,权限和package(application)。 权限是保存在标签里的。每个Permission(权限)有三个属性,即name、package和protection。Name属性包含权限的名字,也就是我们在AndroidManifest.xml所用的,Package属性表明权限所属的包。在大多数情况下,“android”是一个值,因为标签包含默认的权限,以及protection表明安全的等级。

    package标签包含10个属性和一些子标签。

    Sr 属性 描述
    1 name 包名
    2 codePath APK文件安装路径(/system/app/ 或 /data/app/)
    3 nativeLibraryPath 本地函数库(*.so文件),默认路径/data/data/<package name>/lib/
    4 flag 存储ApplicationInfo标记[http://developer.android.com/reference/android/content/pm/ApplicationInfo.html](http://developer.android.com/reference/android/content/pm/ApplicationInfo.html)
    5 ft 十六进制时间戳timestamp
    6 lt 首次安装十六进制时间戳
    7 ut 最后更新十六进制时间戳
    8 version AndroidManifest.xml文件中的版本代码
    [http://developer.android.com/guide/topics/manifest/manifest-element.html#vcode]
    9 sharedUserId Linux用户ID名称,其他应用可查看此ID。与在AndroidManifest.xml中的定义一致[http://developer.android.com/guide/topics/manifest/manifest-element.html#uid]
    10 userId Linux用户ID名称

    子标签

    • sigs 签名信息,count属性代表cert标签的数量。
    • cert 包含证书的key,index属性代表证书的全局索引,当新的证书安装时,我发现index会随着增加。
    • perms 包含开发者已经在AndroidManifest.xml中设置好的权限。

    2. packages.list: 这是一个简单的文本文件,包含了包名、用户id、flag和数据目录,我找不到更加完美的描述了,但是我设想它可提供更快速的已安装包的查找,因为这个文件一直只保存重要的信息。

    1
    2
    3
    4
    com.android.launcher 10013 0 /data/data/com.android.launcher
    com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
    com.android.contacts 10001 0 /data/data/com.android.contacts
    com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin
    3.packages-stoped.xml:这个文件包含了已经是停止状态的包的列表,停止状态的应用是不能接收任何的广播的。参考这个链接来了解更多关于停止状态应用的信息。http://yuki312.blogspot.in/2012/03/androidbroadcaststop.html
    1
    2
    3
    4
    5
    6
    <stopped-packages>
    <pkg name="com.android.widgetpreview" nl="1"></pkg>
    <pkg name="com.example.android.livecubes" nl="1"></pkg>
    <pkg name="com.android.gesture.builder" nl="1"></pkg>
    <pkg name="com.example.android.softkeyboard" nl="1"></pkg>
    </stopped-packages>
     

    5、去哪里可以找到Package Manager和Package Installer的源码?

    Package Manger
    frameworks/base/services/java/com/android/server/pm/Settings.java
    frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
    frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
    frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
    frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
    frameworks/services/java/com/android/server/PreferredComponent.java
    frameworks/core/java/android/content/IntentFilter.java
    frameworks/base/core/java/android/content/pm/PackageParser.java
    frameworks/base/services/java/com/android/server/pm/Installer.java
    frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
    frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java

    Package Installer
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java

    原文链接: kpbird   翻译: 伯乐在线 - hanson
    展开全文
  • 安装和卸载APK(安卓应用程序包文件),运作原理。什么是Package Manager(包管理器)和Package Installer(程序安装包)? APK文件保存Android的哪个地方? APK文件安装过程的细节是怎样的? Package Manager...

    安装和卸载APK(安卓应用程序包文件),运作原理。

    什么是Package Manager(包管理器)和Package Installer(程序安装包)?
    APK文件保存在Android的哪个地方?
    APK文件安装过程的细节是怎样的?
    Package Manager(包管理器)是怎样保存数据的?
    我应该去哪里找Package Manager和Package Installer的源码?
    1、什么是Package Manager和Package Installer

    PackageInstaller是安卓上默认的应用程序,用它来交互式地安装普通包文件。PackageInstaller提供了用户界面来管理应用或者包文件。PackageInstaller调用一个叫InstallAppProgress的activity来获取用户发出的指令。InstallAppProgress会请求Package Manager服务,然后通过indalld来安装包文件。源码提供在/packages/apps/PackageInstaller上。

    Installd这个系统守护程序的首要角色是获取来自Package Manager服务的请求,而该请求是通过Linux套接字/dev/socket/installed获得的。
    Installd使用管理员权限执行一系列的步骤来安装APK。参考:commands.c

    Package Manger是一个实际上管理应用程序安装、卸载和升级的API。当我们安装APK文件时,Package Manager会解析APK包文件和显示确认信息。当我们点击OK按钮后,Package Manger会调用一个叫“InstallPackage”的方法,这个方法有四个参数,也就是uri、installFlags、observer和installPackagename。Package Manger会启动一个叫“package”的service(服务),现在所有模糊的东西会发生在这个service中。你可以在PackageInstaller源码中查看“PackageInstallAcitivity.java”和“InstallAppProgress.java”。Package Manger服务运行在系统服务进程中,而安装守护程序(installd)作为一个本地进程运行着,他们都在系统启动时开始运行。

    2、APK文件保存在Android的哪个地方?

    预装程序(即相机,日历和浏览器等)保存在/system/app/中。
    用户安装程序(APIDemo,Any.do等)保存在/data/app/中。
    Package Manager创建数据目录/data/data//来保存数据库、shared preference、本地函数库和缓存数据。
    你可能会看到apk文件和同一个APK的*.odex文件,而ODEX文件是完全不同的讨论和目的了。

    3、APK文件安装过程的细节是怎样的?

    下面的过程执行在Package Manger服务中。

    等待;
    添加一个包文件到安装进程的队列中;
    确定合适的地方来安装包文件;
    复制apk文件到一个给定的目录下;
    确定应用的UID;
    请求installd守护程序进程;
    创建应用目录和设置权限;
    提取dex代码到缓存目录中;
    解析packages.list、system、data和packages.xml的最新状态;
    向系统发送广播消息,消息带有安装完成效果的名字Intent.ACTION_PACKAGE_ADDED:如果是更新,会带有新的(Intent.ACTION_PACKAGE_REPLACED)。

    这里写图片描述

    4、Package Manager(包管理器)是怎样保存数据的?

    Package Manager保存应用程序的信息在/data/system目录下的三个文件里。下面的例子是从Android 4 ICS(Ice Cream Sandwich)模拟器提取出来的图片。

    1. packages.xml:这个文件包含所有的权限和Packages/Applications。
    &lt;packages&gt;
    &lt;last-platform-version external=&quot;15&quot; internal=&quot;15&quot;&gt;
    &lt;permission-trees&gt;
    &lt;permissions&gt;
    &lt;item name=&quot;android.permission.CHANGE_WIFI_MULTICAST_STATE&quot; package=&quot;android&quot; protection=&quot;1&quot;&gt;
    &lt;item name=&quot;android.permission.CLEAR_APP_USER_DATA&quot; package=&quot;android&quot; protection=&quot;2&quot;&gt;
    .
    .
    .
    . 
    &lt;/item&gt;&lt;/item&gt;&lt;/permissions&gt;
    
    &lt;package codepath=&quot;/system/app/Contacts.apk&quot; flags=&quot;1&quot; ft=&quot;136567b3990&quot; it=&quot;136567b3990&quot; name=&quot;com.android.contacts&quot; nativelibrarypath=&quot;/data/data/com.android.contacts/lib&quot; shareduserid=&quot;10001&quot; ut=&quot;136567b3990&quot; version=&quot;15&quot;&gt;
    &lt;sigs count=&quot;1&quot;&gt;
    &lt;cert index=&quot;2&quot;&gt;
    &lt;/cert&gt;&lt;/sigs&gt;
    &lt;/package&gt;
    .
    .
    .
    .
    &lt;package codepath=&quot;/data/app/com.project.t2i-2.apk&quot; flags=&quot;0&quot; ft=&quot;13a837c2068&quot; it=&quot;13a83704ea3&quot; name=&quot;com.project.t2i&quot; nativelibrarypath=&quot;/data/data/com.project.t2i/lib&quot; userid=&quot;10040&quot; ut=&quot;13a837c2ecb&quot; version=&quot;1&quot;&gt;
    &lt;sigs count=&quot;1&quot;&gt;
    &lt;cert index=&quot;3&quot; key=&quot;308201e53082014ea0030201020204506825ae300d06092a86
    4886f70d01010505003037310b30090603550406130255533110300e060355040a13074
    16e64726f6964311630140603550403130d416e64726f6964204465627567301e170d31
    32303933303130353735305a170d3432303932333130353735305a3037310b300906035
    50406130255533110300e060355040a1307416e64726f6964311630140603550403130d
    416e64726f696420446562756730819f300d06092a864886f70d010101050003818d003
    08189028181009ce1c5fd64db794fd787887e8a2dccf6798ddd2fd6e1d8ab04cd8cdd9e
    bf721fb3ed6be1d67c55ce729b1e1d32b200cbcfc91c798ef056bc9b2cbc66a396aed6b
    a3629a18e4839353314252811412202500f11a11c3bf4eb41b2a8747c3c791c89391443
    39036345b15b5e080469ac5f536fd9edffcd52dcbdf88cf43c580abd0203010001300d0
    6092a864886f70d01010505000381810071fa013b4560f16640ed261262f32085a51fca
    63fa6c5c46fde9a862b56b6d6f17dd49643086a39a06314426ba9a38b784601197246f8
    d568e349a93bc6af315455de7a8923f40d4051a51e1658ee34aca41494ab94ce978ae38
    609803dfb3004806634e6e78dd0be26fe75843958711935ffc85f9fcf81523ce23c86bc
    c5c7a&quot;&gt;
    &lt;/cert&gt;&lt;/sigs&gt;
    &lt;perms&gt;
    &lt;item name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;&gt;
    &lt;/item&gt;&lt;/perms&gt;
    &lt;/package&gt;
    .
    .
    .
    .
    .
    &lt;/permission-trees&gt;&lt;/last-platform-version&gt;&lt;/packages&gt;

    这个xml文件包含两种信息,权限和package(application)。 权限是保存在标签里的。每个Permission(权限)有三个属性,即name、package和protection。Name属性包含权限的名字,也就是我们在AndroidManifest.xml所用的,Package属性表明权限所属的包。在大多数情况下,“android”是一个值,因为标签包含默认的权限,以及protection表明安全的等级。

    package标签包含10个属性和一些子标签。

    这里写图片描述

    子标签

    sigs 签名信息,count属性代表cert标签的数量。
    cert 包含证书的key,index属性代表证书的全局索引,当新的证书安装时,我发现index会随着增加。
    perms 包含开发者已经在AndroidManifest.xml中设置好的权限。
    2. packages.list: 这是一个简单的文本文件,包含了包名、用户id、flag和数据目录,我找不到更加完美的描述了,但是我设想它可提供更快速的已安装包的查找,因为这个文件一直只保存重要的信息。

    com.android.launcher 10013 0 /data/data/com.android.launcher
    com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
    com.android.contacts 10001 0 /data/data/com.android.contacts
    com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin

    3.packages-stoped.xml:这个文件包含了已经是停止状态的包的列表,停止状态的应用是不能接收任何的广播的。参考这个链接来了解更多关于停止状态应用的信息。
    http://yuki312.blogspot.in/2012/03/androidbroadcaststop.html

    &lt;stopped-packages&gt;
    &lt;pkg name=&quot;com.android.widgetpreview&quot; nl=&quot;1&quot;&gt;&lt;/pkg&gt;
    &lt;pkg name=&quot;com.example.android.livecubes&quot; nl=&quot;1&quot;&gt;&lt;/pkg&gt;
    &lt;pkg name=&quot;com.android.gesture.builder&quot; nl=&quot;1&quot;&gt;&lt;/pkg&gt;
    &lt;pkg name=&quot;com.example.android.softkeyboard&quot; nl=&quot;1&quot;&gt;&lt;/pkg&gt;
    &lt;/stopped-packages&gt;

    5、去哪里可以找到Package Manager和Package Installer的源码?

    Package Manger
    frameworks/base/services/java/com/android/server/pm/Settings.java
    frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
    frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
    frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
    frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
    frameworks/services/java/com/android/server/PreferredComponent.java
    frameworks/core/java/android/content/IntentFilter.java
    frameworks/base/core/java/android/content/pm/PackageParser.java
    frameworks/base/services/java/com/android/server/pm/Installer.java
    frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
    frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java

    Package Installer
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
    packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java

    原文链接:http://blog.jobbole.com/67286/

    展开全文
  • 当我们使用电脑通过数据线连接上安卓手机的时候,如果手机没有开启...接着,OPPO A3应用程序界面点中设置图标,进入OPPO A3系统设置界面。 接下来,点击设置界面上的“系统”栏目,并进入关于手机栏目。 第...

    当我们使用电脑通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,电脑则无办法成功读到我们的手机,这时我们需要找方法将手机的Usb开发者调试模式打开,这里我们叙述OPPO A3如何开启Usb开发者调试模式的流程。

    接着,在OPPO A3应用程序界面点中设置图标,进入OPPO A3系统设置界面。

    接下来,点击设置界面上的“系统”栏目,并进入关于手机栏目。

    第三步找到“版本号”这行,连续点击“版本号”这行,直到看出弹出“已进入开发者模式”的相关的提示文字。

    到这里,重新回到OPPO A3的设置主界面上,找到系统并点击进入,这个时候,我们就可以找到开发者选项一栏并进入“开发人员选项”.

    最后,打开开启开发者选项选项,并打开界面下面的“Usb调试”选项。

    这样我们就成功打开了OPPO A3的usb调试模式。

    在一些情况下,我们使用的一些功能较好的App比如我们公司营销部门的同事使用的一个营销软件引号精灵,老版本就需要打开usb调试模式下使用,现在新版本不需要了。

     

    转载于:https://www.cnblogs.com/lpypg/p/10762517.html

    展开全文
  • 我们使用PC链接安卓手机的时候,如果手机没有开启USB调试模式,PC则没法成功读到我们的手机,因此我们需要处理方法将手机的USB调试模式打开,以下内容我们讲解OPPO K1如何开启USB调试模式的流程。 第一步,...
  • 经常我们使用PC链接安卓手机的时候,如果手机没有开启USB...第一步OPPO TFphone应用程序界面打开“设置”ICON,进入OPPO TFphone系统“设置”界面。 然后点击设置界面上的“系统”一行,并进入“关于手机”一...
  • 我们使用PC连接安卓手机的时候,如果手机...首先OPPO R15 Pro应用程序界面启动设置图标,进入OPPO R15 Pro系统设置界面。 第二步,点击设置界面上的系统一行,并进入“关于手机”一行。 接下来,找到“版本...
  • 经常我们使用PC连接安卓手机的时候,如果手机...首先OPPO A57应用程序界面启动“设置”icon,进入OPPO A57系统“设置”界面。接下来,点击设置界面上的“系统”栏目,并进入“关于手机”栏目。然后找到“版本号...
  • 经常我们使用pc通过数据线链接到安卓手机的时候,如果手机没有开启...首先,OPPO A73应用程序界面打开设置图标,进入OPPO A73系统设置界面。 第二步,点击设置界面上的系统栏目,并进入关于手机栏目。 接着,...
  • 经常我们使用电脑链上安卓...接着,OPPO R15应用程序界面启动“设置”ICON,进入OPPO R15系统“设置”界面。 接下来,点击设置界面上的系统这行,并进入关于手机这行。 然后找到版本号栏目,连续点击版本号栏...
  • 我们使用pc链接安卓手机的时候,如果手机没有...首先OPPO R11s应用程序界面启动《设置》ICON,进入OPPO R11s系统《设置》界面。第二步,点击设置界面上的系统一行,并进入“关于手机”一行。接着找到版本号...
  • 当我们使用pc链接安卓手机的时候,如果手机...第一步,OPPO K3应用程序界面启动设置icon,进入OPPO K3系统设置界面。 接下来,点击设置界面上的“系统”这一行,并进入关于手机这一行。 然后找到版本号这...
  • 当我们使用电脑通过数据线连接到安卓手机的时候,如果手机...首先,OPPO R11应用程序界面启动“设置”ICON,进入OPPO R11系统“设置”界面。 接下来点击设置界面上的“系统”一行,并进入关于手机一行。 接着...
  • 我们使用pc通过数据线链接到安卓手机的时候,如果手机没有开启Usb调试模式,pc则没能够成功读到我们的手机,如果遇到这个情况我们需要处理方法将手机的Usb调试模式打开,以下资料我们叙述OPPO Realme 2 Pro如何...
  • 每次我们使用Pc接通安卓手机的时候,如果...接着OPPO A7应用程序界面打开设置图标,进入OPPO A7系统设置界面。 然后点击设置界面上的系统这行,并进入“关于手机”这行。 接着,找到“版本号”一行,连续点击“...
  • 当我们使用pc通过数据线链接到安卓手机的时候,如果...接着,OPPO A59s应用程序界面点中“设置”图标,进入OPPO A59s系统“设置”界面。第二步点击设置界面上的系统一栏,并进入“关于手机”一栏。第三步,找到“...
  • 每当我们使用pc连接安卓手机的...接着OPPO A5应用程序界面启动“设置”icon,进入OPPO A5系统“设置”界面。 接下来点击设置界面上的系统一栏,并进入“关于手机”一栏。 第三步,找到“版本号”栏目,连续点...
  • 我们使用Pc通过数据线链上安卓手机的时候,如果手机没有开启USB开发者调试模式,Pc则没能成功读到我们的手机,因此我们需要解决方法将手机的USB开发者调试模式打开,今天我们讲解OPPO R15x如何开启USB开发者调试...
  • 我们使用pc接通安卓手机的时候,如果手机没有...第一步,OPPO F1s应用程序界面打开设置ICON,进入OPPO F1s系统设置界面。 然后点击设置界面上的系统这行,并进入关于手机这行。 第三步,找到“版本号”这一...
  • 经常我们使用pc通过数据线连接到安卓手机的时候,如果手机没有开启USB调试...第一步,OPPO F9 Pro应用程序界面启动《设置》icon,进入OPPO F9 Pro系统《设置》界面。 接着,点击设置界面上的系统一行,并进入关...
  • 经常我们使用PC链上安卓手机的时候,...第一步OPPO F3应用程序界面打开“设置”ICON,进入OPPO F3系统“设置”界面。 接着点击设置界面上的系统一行,并进入关于手机一行。 接着,找到版本号这行,连续点击版本...
  • 每当我们使用PC通过数据线链接到安卓手机的时候,如果手机没有开启USB调试模式...接着OPPO realme 2应用程序界面点中“设置”图标,进入OPPO realme 2系统“设置”界面。 第二步点击设置界面上的系统这行,并进...
  • 我们使用pc通过数据线连接到安卓手机的时候,如果手机没有...第一步OPPO R9s应用程序界面启动设置icon,进入OPPO R9s系统设置界面。第二步,点击设置界面上的“系统”一栏,并进入“关于手机”一栏。接下来,...
  • 经常我们使用Pc通过数据线连接上安卓手机的时候,如果手机没有开启usb调试...首先OPPO Mirror 5应用程序界面打开《设置》ICON,进入OPPO Mirror 5系统《设置》界面。 接下来点击设置界面上的系统一栏,并进入“...
  • 我们使用PC通过数据线链接到安卓手机的时候,如果...第一步,OPPO A79应用程序界面打开设置icon,进入OPPO A79系统设置界面。接下来点击设置界面上的系统这行,并进入“关于手机”这行。第三步,找到“版本号”...
  • 每当我们使用pc链上安卓手机的时候,如果手机没有开启usb开发者调试模式,...首先,OPPO R17 Pro应用程序界面打开《设置》图标,进入OPPO R17 Pro系统《设置》界面。 第二步点击设置界面上的“系统”这一行,并进...
  • 经常我们使用pc通过数据线链接到安卓手机的时候,如果手机没有...首先OPPO R7s Plus应用程序界面点中《设置》icon,进入OPPO R7s Plus系统《设置》界面。第二步,点击设置界面上的系统一栏,并进入关于手机一栏...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

安卓应用程序在哪里找