Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android是否授予应用程序安装顺序的权限?_Android_Permissions - Fatal编程技术网

android是否授予应用程序安装顺序的权限?

android是否授予应用程序安装顺序的权限?,android,permissions,Android,Permissions,AppA在清单中定义权限,如 package="com.example.definepermission" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <permission android:name="com.example.permi

AppA在清单中定义权限,如

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>
$dumpp 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授予此正常权限

这种情况可以在谷歌nexus,HW mate8,维梧复制。 谷歌地图的新版本首先安装在中国的andorid手机上(中国唯一的seal),而在所有的谷歌gms(谷歌播放服务)leat中,这也将复制这种情况

日志:

第36607行:12-13 12:23:26.937 2032 3210 D PackageManager:com.google.android.apps.maps perm com.google.android.gms.permission.ACTIVITY_认可授权:1 第36609行:12-13 12:23:26.937 2032 3210 W软件包管理器:未授予com.google.android.gms.permission.ACTIVITY_对软件包com.google.android.apps.maps的识别权限,因为它以前安装时没有

android是否授予应用程序安装顺序的权限

对。引用几年前的话:

Android中的自定义权限是“wins中的第一个”。换句话说,对于给定的
android:name
,无论哪个应用程序首先具有
元素,都可以为所有后续应用程序定义该权限的详细信息

这可以解决这个问题,但我想知道为什么

**//如果这是一个现有的非系统包,则 //我们无法向其添加任何新权限

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:
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)
private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace,
        String packageOfInterest) {

    ...

   if (grant != GRANT_DENIED) {
                if(DEBUG_PERMISSION){
                    Slog.d(TAG,"\tps:"+ps+" permissionFix:"+ps.installPermissionsFixed+" origPermissions:"+origPermissions);
                }
                if (!isSystemApp(ps) && ps.installPermissionsFixed) {
                    **// If this is an existing, non-system package, then
                    // we can't add any new permissions to it.** // why ??
                    if (!allowedSig && !origPermissions.hasInstallPermission(perm)) {

                        if(DEBUG_PERMISSION){
                            Slog.d(TAG,"\tpkg:"+pkg+" perm:"+perm);
                        }

                        // Except...  if this is a permission that was added
                        // to the platform (note: need to only do this when
                        // updating the platform).
                        if (!isNewPlatformPermissionForPackage(perm, pkg)) {
                            grant = GRANT_DENIED;
                        }
                    }
                }

                //add for app lose permission begin
                if(grant == GRANT_DENIED){
                    if(level == PermissionInfo.PROTECTION_NORMAL){
                            grant = GRANT_INSTALL;
                           //for normal, just grant.
                        }else {
                            allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
                            if(allowedSig){
                                 //and if signature equal or system app, let get it.
                                 grant = GRANT_INSTALL;
                            }
                        }
                        Slog.i(TAG,"*check signature*  level:"+level+" "+pkg.packageName+" perm:"+perm+" grant:"+grant+" allowedSig:"+allowedSig +" bp:"+bp);
                }
                //add for app lose permission begin


                switch (grant) {
                    case GRANT_INSTALL: {
                        // Revoke this as runtime permission to handle the case of
                        // a runtime permission being downgraded to an install one.
                        for (int userId : UserManagerService.getInstance().getUserIds()) {
                            if (origPermissions.getRuntimePermissionState(
                                    bp.name, userId) != null) {
                                // Revoke the runtime permission and clear the flags.
                                origPermissions.revokeRuntimePermission(bp, userId);
                                origPermissions.updatePermissionFlags(bp, userId,
                                      PackageManager.MASK_PERMISSION_FLAGS, 0);
                                // If we revoked a permission permission, we have to write.
                                changedRuntimePermissionUserIds = ArrayUtils.appendInt(
                                        changedRuntimePermissionUserIds, userId);
                            }
                        }