什么是Android中的sharedUserId,它是如何使用的?

Bha*_*hal 60 java android android-ndk android-emulator android-intent

我在sharedUserID中感到困惑.什么是使用sharedUserId?如何使用?在android中使用哪里?

小智 36

默认情况下,Android会为应用程序分配用户ID.它是您的应用程序的唯一ID,意味着除了具有此ID的用户之外的任何人都无法访问您的应用程序的资源.您无法访问其他应用程序的数据或在当前进程中运行它.当从活动中调用另一个应用程序的活动时,android会将控件传递给被调用的新活动,并且它们在完全不同的进程中运行.

但是,在清单文件中,您可以明确标识应用程序的用户标识.当您为多个应用程序声明相同的用户ID时,他们可以访问彼此的资源(数据字段,视图等).您可以显示其他应用程序中的数据或在您的过程中运行它.

这是你如何使用它:来自http://developer.android.com/guide/topics/manifest/manifest-element.html

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
    android:sharedUserId="string"
    android:sharedUserLabel="string resource" 
    android:versionCode="integer"
    android:versionName="string"
    android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .</manifest>
Run Code Online (Sandbox Code Playgroud)

  • 一个重要的补充是,您只能使用相同的shareduserid安装两个应用程序,这两个应用程序都使用相同的证书进行签名. (40认同)
  • 对我来说很好(目标API 21),至少3个应用程序共享相同的UserId. (4认同)

Par*_*raj 34

SharedUserId用于在两个或多个应用程序之间共享数据,进程等.它在AndroidManifest.xml中定义,

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.shared"
    android:sharedUserLabel="@string/sharedUserLabel"
    ...>
Run Code Online (Sandbox Code Playgroud)

并在Android.mk中为该应用定义共享参数,例如

LOCAL_CERTIFICATE := shared
Run Code Online (Sandbox Code Playgroud)

希望对你有所帮助.

  • @IgorGanapolsky Android.mk是Android NDK(C/C++)的makefile.如果您的应用仅使用Java,则您没有. (4认同)
  • 那是不对的.所有应用程序都需要此文件,这些应用程序将作为AOSP的一部分构建.包括java只有一些. (4认同)
  • 你如何修改Android.mk?我还没有看到任何关于它的引用,告诉我们该文件的全部内容...... (3认同)