android - android是否授予权限其他应用程序安装顺序?

标签 android permissions

AppA 在 list 中定义 permissionA

package="com.example.definepermission"
android:versionCode="1"
android:versionName="1.0" >    
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

 <permission 
     android:name="com.example.permission.test.permissionA"
     android:protectionLevel="normal"
     >         
 </permission>


<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" 
        android:permission="com.example.permission.test.permissionA">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

然后 AppB 请求 AppA Activity ,如

<uses-permission android:name="com.example.permission.test.permissionA"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"

private void startNewActivity(){
        Intent intent = new Intent();
        intent.setClassName("com.example.definepermission", "com.example.definepermission.MainActivity");
        startActivity(intent);
    }

来自 pkms 转储

$ dumpp com.example.redfinepermission
Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        701f87f com.example.redfinepermission/.MainActivity

Key Set Manager:
  [com.example.redfinepermission]
      Signing KeySets: 37

Packages:
  Package [com.example.redfinepermission] (6c7b04c):
    userId=10089
    pkg=Package{1856895 com.example.redfinepermission}
    codePath=/data/app/com.example.redfinepermission-1
    resourcePath=/data/app/com.example.redfinepermission-1
    legacyNativeLibraryDir=/data/app/com.example.redfinepermission-1/lib
    primaryCpuAbi=null
    secondaryCpuAbi=null
    versionCode=1 targetSdk=21
    versionName=1.0
    splits=[base]
    applicationInfo=ApplicationInfo{3e91daa com.example.redfinepermission}
    flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    dataDir=/data/user/0/com.example.redfinepermission
    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
    timeStamp=2016-12-13 20:57:27
    firstInstallTime=2016-12-13 20:57:27
    lastUpdateTime=2016-12-13 20:57:27
    signatures=PackageSignatures{cc79d9b [3e58538]}
    installPermissionsFixed=true installStatus=1
    pkgFlags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    requested permissions:
      com.example.permission.test.permissionA
    User 0:  installed=true hidden=false stopped=true notLaunched=true enabled=0
      runtime permissions:
    User 10:  installed=true hidden=false stopped=true notLaunched=true enabled=0
      runtime permissions:

$ dump com.example.definepermission

Activity Resolver Table:
  Non-Data Actions:
      android.intent.action.MAIN:
        6e05ed9 com.example.definepermission/.MainActivity

Permissions:
  Permission [com.example.permission.test.permissionA] (f44b09e):
    sourcePackage=com.example.definepermission
    uid=10090 gids=null type=0 prot=normal
    perm=Permission{643877f com.example.permission.test.permissionA}
    packageSetting=PackageSetting{943934c com.example.definepermission/10090}

Key Set Manager:
  [com.example.definepermission]
      Signing KeySets: 24

Packages:
  Package [com.example.definepermission] (943934c):
    userId=10090
    pkg=Package{16f0f95 com.example.definepermission}
    codePath=/data/app/com.example.definepermission-1
    resourcePath=/data/app/com.example.definepermission-1
    legacyNativeLibraryDir=/data/app/com.example.definepermission-1/lib
    primaryCpuAbi=null
    secondaryCpuAbi=null
    versionCode=1 targetSdk=21
    versionName=1.0
    splits=[base]
    applicationInfo=ApplicationInfo{54738aa com.example.definepermission}
    flags=[ DEBUGGABLE HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    dataDir=/data/user/0/com.example.definepermission
    supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
    timeStamp=2016-12-13 20:57:46
    firstInstallTime=2016-12-13 20:57:46
    lastUpdateTime=2016-12-13 20:57:46
    signatures=PackageSignatures{131c9b [5bc9838]}
    installPermissionsFixed=true installStatus=1
    pkgFlags=[ DEBUGGABLE HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
    declared permissions:
      com.example.permission.test.permissionA: prot=normal, INSTALLED
    User 0:  installed=true hidden=false stopped=false notLaunched=false enabled=0
      runtime permissions:
    User 10:  installed=true hidden=false stopped=true notLaunched=true enabled=0
      runtime permissions:

然后运行 ​​AppB 会捕获异常

12-13 20:59:01.323  4109  4109 E AndroidRuntime: Process: com.example.redfinepermission, PID: 4109

    12-13 20:59:01.323  4109  4109 E AndroidRuntime: java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.example.definepermission/.MainActivity } from ProcessRecord{ad97706 4109:com.example.redfinepermission/u0a89} (pid=4109, uid=10089) requires com.example.permission.test.permissionA

12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1620)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1573)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.Activity.startActivityForResult(Activity.java:3930)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.Activity.startActivityForResult(Activity.java:3890)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.Activity.startActivity(Activity.java:4213)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.Activity.startActivity(Activity.java:4181)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at com.example.redfinepermission.MainActivity.startNewActivity(MainActivity.java:31)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at com.example.redfinepermission.MainActivity.onClick(MainActivity.java:38)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.view.View.performClick(View.java:5204)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.view.View$PerformClick.run(View.java:21153)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.os.Handler.handleCallback(Handler.java:739)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:95)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:148)
12-13 20:59:01.323  4109  4109 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:5417)

如果先安装AppA,android setting.mPermission会包含com.example.permission.test.permissionA,再安装AppB,android会将这个普通权限授予AppB。

此案例可在google nexus、HW mate8、vivo重现。 并且google map 新版本首先安装在中国的andorid 手机上(仅在中国封印),并安装google gms (google play service) leat,这也会重现这个案例。

日志:

第 36607 行:12-13 12:23:26.937 2032 3210 D PackageManager:com.google.android.apps.maps perm com.google.android.gms.permission.ACTIVITY_RECOGNITION grant:1 第 36609 行:12-13 12:23:26.937 2032 3210 W PackageManager:未授予 com.google.android.gms.permission.ACTIVITY_RECOGNITION 包 com.google.android.apps.maps 的权限,因为它之前安装时没有

最佳答案

Does android grant permission fellow app install order?

是的。引用 myself从几年前:

Custom permissions in Android are "first one in wins". In other words, whatever app first has a <permission> element for a given android:name gets to define, for all subsequent apps, what the details are for that permission.

关于android - android是否授予权限其他应用程序安装顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122009/

相关文章:

android ImageButton 不拉伸(stretch)图像

java - 使用适用于 Android 的 Parse 和 Java 从 JSON 创建对象

android - 如何使用 Dagger 2 BindsOptionalOf

android - 从 Room DB 返回项目计数

ruby-on-rails - 当部署用户与运行用户不同时处理 Ruby on Rails 项目中的 shared/tmp

c# - 在 C# 中,如何检查 File.Delete() 是否会在不尝试的情况下成功?

unix - 用户无法读取文件但属于该组

android - 打开/关闭 WiFi

android - Android中哪些方法需要android.permission.DEVICE_POWER?

android - Paypal 集成到 Android 应用程序