zoukankan      html  css  js  c++  java
  • 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel

    http://blog.csdn.net/wirelessqa/article/details/8581652

    android:sharedUserId

    当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个应用包有自己独立的userid。

    userid的特点:

    1. 作为APK身份的标识 2. userid对应一个Linux用户,所以不同APK(用户)间互相访问数据默认是禁止的.

    那么不同APK之间想要互相访问数据应该怎么办呢?

    Android为我们提供了两种数据互访的方法:

    一是使用Share Preference. / Content Provider

    APK通过指定接口和数据供其它APK读取,开发者需要实现接口和指定share的数据。【此方法后面再详细讲解】

    二是在配置文件manifest中配置相同的UserId

    通过共享userid,拥有相同userid的用户可以配置成运行在同一进程当中,因此默认就是可以互相访问任意数据的

    也可以配置为不同进程当中,彼此之间就像访问自己的数据一样访问彼此的数据库和文件。

    例子:

    应用程序1:com.wirelessqa.sqlite

    01 <manifestxmlns:android="http://schemas.android.com/apk/res/android"
    02     package="com.wirelessqa.sqlite"
    03  
    04     android:versionCode="1"
    05  
    06     android:versionName="1.0"
    07  
    08     android:sharedUserId="wirelessqa.com"
    09  
    10     >

    应用程序2:com.wirelessqa.activity

    1 <manifestxmlns:android="http://schemas.android.com/apk/res/android"
    2     package="com.wirelessqa.activity"
    3     android:versionCode="1"
    4     android:versionName="1.0"
    5     android:sharedUserId="wirelessqa.com"
    6     >

    这两个应用程序的userid相同,都为wirelessqa.com,因此两个应用程序共享userid,如果1想访问2的数据怎么办呢?

    Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);

    这样通过content可以获取到应用2中的资源,包括:数据库,preference,资源文件等等

    注意:

    基于安全考虑,两个package需要有相同的签名,否则没有验证,应用程序一旦设置了shareuserid,当程序被破解,其它应用也可以访问我们的数据,数据不安全设置共享也就没有多大意义了。

    总结:

    如果想要不同的APK之间共享数据需要满足以下条件:

    1.APK的签名必须相同

    2.android:shareUserId的值必须相同

    3.如果想要运行在同一个进行当中,必须设置android:process的值相同。

    application设置应用程序的全部组件都运行在某个线程中

    1 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"
    2  
    3         android:theme="@style/AppTheme" android:process="wqa.com">

    android:sharedUserLabel

    这个属性给共享的userid定义了一个用户可读的标签。这个标签必须字符串资源来设置,不能使原生的字符串。

    这个属性在API Level 3中被引入,只有在sharedUserId属性被设置,这个属性才有意义。

  • 相关阅读:
    微信公众号的开通
    支付宝同步请求检查appid,以及公钥,私钥是否正确
    检查支付宝异步通知是否正确
    支付宝开发者中心添加应用
    js中undefined和null的区别
    判断前端<input>标签是否选中(批量删除时,批量选择复选框)
    P1396 营救+二分+BFS
    P1396 营救+生成树
    P1396 营救+最短路
    P1195 口袋的天空
  • 原文地址:https://www.cnblogs.com/lianghui66/p/4205880.html
Copyright © 2011-2022 走看看