面试之路(13)-android apk之间共享数据的方式以及shareUserId详解

1.通过content Provider/sharedPreferrence

2.通过shareUserId

我们详细介绍一下shareUserId:

Android App Sandbox(android沙箱机制)

我们知道 Linux 中的 Sandbox 主要做隔离工作,将不同任务或用户间的耦合降到最低。Android 应用也借用了 Linux Sandbox技术,将不同 APP 之间做了隔离;APP 之间的隔离主要是资源隔离和权限访问隔离。

每个 Android APP 都运行在他们自己的 Linux 线程中(UID不同),每个应用程序彼此独立,默认情况下无法访问其他应用程序资源。 APP 权限机制为应用程序之间的资源互访提供了可行性,APP必须申请到权限并经过用户授权后才能访问 Android 系统 API 或 其他阴功程序的服务。

面试之路(13)-android apk之间共享数据的方式以及shareUserId详解

如果两个 Android App 运行在同一个进程里(此时的 UID 是相同的),可以共享数据和代码。

如何让两个 APP 运行在同一个进程里?

  • 首先,两个 APP 要用相同的 private key 来签名
  • 然后,添加两个APP manifest.xml 文件中属性 android:sharedUserId,均设置为相同的值或名字(其实是设置成相同的UID)。

利用ShareUserID共享数据

try {
            Context ct=this.createPackageContext ("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);
            SharedPreferences sp = ct.getSharedPreferences("appInfo", MODE_PRIVATE);
            String str2 = sp.getString("appname", "service");
            Log.d("mythou", "share preference-->" + str2);
        } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

关键代码:

Context ct=this.createPackageContext("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);

Android Permission 机制

Permissions 机制限制应用访问特定的资源,如照相机、网络、外部存储、查看通话记录以及某些API。

APP 可以自己定义 Permission 来限制别的APP访问自己的资源。别的应用想访问此 APP 的资源,必须在自己的 AndroidManifest.xml 中添加此 Permission。自定义权限也是在 AndroidManifest.xml 通过 标签定义。

自定义一个 Permission,至少需要的元素是 name, description, label 和 protectionLevel。

我们最关心的选项是 protectionLevel

normal,默认值。系统自动授予此 Permission,在 APP 安装的时候能看到申请此 Permission。

signature,具有相同的 Signature的 APP,才能申请此 Permission,否则,系统拒绝。

dangerous,一般来说系统不会自动授予此 Permission,因为此 Permission 会有潜在的威胁;一般来说在使用 APP 的过程中,需要用到此权限,会弹出窗口,让用户来授权。

上一篇:box-shadow 详解及示例


下一篇:Block深入浅出