android9.0 默认apk权限添加方法

1.默认赋予全部权限:
安卓动态要求用户允许添加权限,直接将如下代码中的final boolean grantPermissions = (args.installFlags
& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;改为final boolean grantPermissions=true便可。

文件路径:framework\base\services\core\java\com\android\server\pm\PackageManagerService.java

case POST_INSTALL: {
                    if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);

                    PostInstallData data = mRunningInstalls.get(msg.arg1);
                    final boolean didRestore = (msg.arg2 != 0);
                    mRunningInstalls.delete(msg.arg1);

                    if (data != null) {
                        InstallArgs args = data.args;
                        PackageInstalledInfo parentRes = data.res;

                        /*final boolean grantPermissions = (args.installFlags
                                & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
                        */
                        //直接将grantPermissions该为true便可
                        final boolean grantPermissions = true;
                        final boolean killApp = (args.installFlags
                                & PackageManager.INSTALL_DONT_KILL_APP) == 0;
                        final boolean virtualPreload = ((args.installFlags
                                & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
                        final String[] grantedPermissions = args.installGrantPermissions;

                        // Handle the parent package
                        handlePackagePostInstall(parentRes, grantPermissions, killApp,
                                virtualPreload, grantedPermissions, didRestore,
                                args.installerPackageName, args.observer);

                        // Handle the child packages
                        final int childCount = (parentRes.addedChildPackages != null)
                                ? parentRes.addedChildPackages.size() : 0;
                        for (int i = 0; i < childCount; i++) {
                            PackageInstalledInfo childRes = parentRes.addedChildPackages.valueAt(i);
                            handlePackagePostInstall(childRes, grantPermissions, killApp,
                                    virtualPreload, grantedPermissions, false /*didRestore*/,
                                    args.installerPackageName, args.observer);
                        }

                        // Log tracing if needed
                        if (args.traceMethod != null) {
                            Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, args.traceMethod,
                                    args.traceCookie);
                        }
                    } else {
                        Slog.e(TAG, "Bogus post-install token " + msg.arg1);
                    }

                    Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "postInstall", msg.arg1);
                } break;

2.根据包名赋予权限:
文件路径:framework\base\services\core\java\com\android\server\pm\permission\DefaultPermissionGrantPolicy.java

--- a/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -94,7 +94,7 @@ import java.util.Set;
  */
 public final class DefaultPermissionGrantPolicy {
     private static final String TAG = "DefaultPermGrantPolicy"; // must be <= 23 chars
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;

     private static final int DEFAULT_FLAGS =
             PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
@@ -216,6 +216,7 @@ public final class DefaultPermissionGrantPolicy {
                 }
             }
         };
+        Slog.e(TAG,"vsoonbsp helloworld\n");
         mPermissionGrantedCallback = callback;
         mPermissionManager = permissionManager;
         mServiceInternal = LocalServices.getService(PackageManagerInternal.class);
@@ -263,8 +264,55 @@ public final class DefaultPermissionGrantPolicy {
         }
     }

+    //声明要赋予apk包名
+    private static final String PCK_NAME_MICROSOFT = "com.microsoft.translator";
+    private static final String PCK_NAME_TTS = "com.google.android.tts";
+    private static final String PCK_NAME_SEARCH = "com.google.android.googlequicksearchbox";
+

+    private void grantPermissionsToCustomApp(int userId){
+        try{
+            PackageParser.Package customPackage = getSystemPackage(PCK_NAME_MICROSOFT);
+            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
+                grantRuntimePermissions(customPackage, LOCATION_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, MICROPHONE_PERMISSIONS, userId);
+            }
+
+            customPackage = getSystemPackage(PCK_NAME_MICROSOFT);
+            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
+                grantRuntimePermissions(customPackage, LOCATION_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, MICROPHONE_PERMISSIONS, userId);
+            }
+
+            customPackage = getSystemPackage(PCK_NAME_SEARCH);
+            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
+                grantRuntimePermissions(customPackage, LOCATION_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissions(customPackage, MICROPHONE_PERMISSIONS, userId);
+            }
+
+
+        }catch(Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     public void grantDefaultPermissions(int userId) {
         grantPermissionsToSysComponentsAndPrivApps(userId);
+        grantPermissionsToCustomApp(userId);
         grantDefaultSystemHandlerPermissions(userId);
         grantDefaultPermissionExceptions(userId);
     }

3.通过default-permissions-google.xml的方式
该文件编译的时候要编译到/system/etc/default-permissions/default-permissions-google.xml中。
可以使用Android.mk的PRODUCT_COPY_FILES方式拷贝。
关于default-permissions-google.xml相关的可以参考谷歌https://source.android.google.cn/devices/tech/config/perms-whitelist

<exception
            package="com.google.android.tts"
            sha256-cert-digest="56:BE:13:2B:78:06:56:FE:24:44:CD:34:32:6E:B5:D7:AA:C9:1D:20:96:AB:F0:FE:67:3A:99:27:06:22:EC:87">
        <!-- External storage -->
        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
        <!-- Contacts -->
        <permission name="android.permission.READ_CONTACTS" fixed="false"/>
        <permission name="android.permission.WRITE_CONTACTS" fixed="false"/>
        <!-- microphone -->
        <permission name="android.permission.RECORD_AUDIO" fixed="false"/>
    </exception>

   <exception
            package="com.google.android.googlequicksearchbox"
            sha256-cert-digest="56:BE:13:2B:78:06:56:FE:24:44:CD:34:32:6E:B5:D7:AA:C9:1D:20:96:AB:F0:FE:67:3A:99:27:06:22:EC:87">
        <!-- External storage -->
        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
        <!-- Contacts -->
        <permission name="android.permission.READ_CONTACTS" fixed="false"/>
        <permission name="android.permission.WRITE_CONTACTS" fixed="false"/>
        <!-- microphone -->
        <permission name="android.permission.RECORD_AUDIO" fixed="false"/>
    </exception>

   <exception
            package="com.microsoft.translator"
            sha256-cert-digest="56:BE:13:2B:78:06:56:FE:24:44:CD:34:32:6E:B5:D7:AA:C9:1D:20:96:AB:F0:FE:67:3A:99:27:06:22:EC:87">
        <!-- External storage -->
        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
        <!-- Contacts -->
        <permission name="android.permission.READ_CONTACTS" fixed="false"/>
        <permission name="android.permission.WRITE_CONTACTS" fixed="false"/>
        <!-- microphone -->
        <permission name="android.permission.RECORD_AUDIO" fixed="false"/>
    </exception>

以上就是android9.0 默认apk权限添加的详细内容,更多关于android9.0 添加默认权限的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android 获取 usb 权限的两种方法

    前言: 最近工作上遇到几个USB模块在android平台上适配使用的情况,所以要用到USB权限获取问题 ##USB权限获取有以下2种方式: 一.直接在AndroidManifest.xml文件中进行如下配置: <activity android:name=".DemoCustomAndroidUSBActivity" android:label="@string/app_name"> <intent-filter> <action an

  • Android Studio 超级简单的打包生成apk的方法

    本文介绍了Android Studio 超级简单的打包生成apk,分享给大家,也给自己留个笔记. 为什么要打包: apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用.打包分debug版和release包,通常所说的打包指生成release版的apk,release版的apk会比debug版的小,release版的还会进行混淆和用自己的keystore签名,以防止别人反编译后重新打包替换你的应用. 简单点说就是给你的apk发身份证,上户口,防止和你长的一样的人,假冒你.这里

  • Android程序打包为APK的方法详解

    Andriod安装包文件(Android Package),简称APK,后缀名为.apk. 1.生成未签名的安装包 Build -> Build Bundle(s)/APK(s) -> Build APK(s)    会生成一个未签名的apk文件,默认为debug版,可以正常安装使用. 可以 Build -> Select Build Variant -> 选择生成的apk版本(debug.release),再 Build -> Build Bundle(s)/APK(s)

  • Android 通过代码安装 APK的方法详解

    在 APK 开发中,通过 Java 代码来打开系统的安装程序以安装 APK 并不是什么难事,一般的 Android 系统都有开放这一功能. 但随着 Android系统版本的迭代,其对于权限的把控越来越严格,或者说是变得越来越注重安全性.这就导致了以前可以通过很简单的几行代码就能实现的功能,现在要复杂很多. 对于通过代码打开系统安装程序这一功能的限制,其分水岭在 Android7.0,即 Android N 上.通常在 Android N以上的系统使用一种做法,以下则使用另一种做法. 传统的通过代

  • Android 如何实现动态申请权限

    OverView 今天在复习的时候,突然复习到我们的相机操作,但是对于相机操作,对于我来说比较复杂的是对于权限的操作.所有我们需要对我们的相机操作进行一些笔记的整理,加深记忆. 开发环境 Android Studio 3.6 Android 11(R) 该笔记使用 java 权限申请的基础知识 学习自:GOOGLE ANDROID DEVELOPERS 对于我们所需要申请的权限我们需要进行如下的操作. 我们需要将所有需要申请的权限添加到App/src/main/AndroidManifest.x

  • Android如何在Gradle中更改APK文件名详解

    前言 本文主要给大家介绍了关于Android在Gradle中更改APK文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk.对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk. 需要在app的目录下面修改build.gradle文件. 第一步是将pro

  • 详解Android开发录音和播放音频的步骤(动态获取权限)

    步骤: 配置权限: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.work.mediaplay"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <us

  • android9.0 默认apk权限添加方法

    1.默认赋予全部权限: 安卓动态要求用户允许添加权限,直接将如下代码中的final boolean grantPermissions = (args.installFlags & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;改为final boolean grantPermissions=true便可. 文件路径:framework\base\services\core\java\com\android\server\pm\Pac

  • Android 7.0 SEAndroid app权限配置方法

    1.SEAndroid app分类 SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型): 1)untrusted_app 第三方app,没有Android平台签名,没有system权限 2)platform_app 有Android平台签名,没有system权限 3)system_app 有android平台签名和system权限 从上面划分,权限等级,理论上:untrusted_app < platform_app < syste

  • MySQL8.0设置远程访问权限的方法

    上一篇文章讲解了重置 MySQL 的密码,有同学反馈无法程连接到数据库,这是因为 MySQL 安装完成后只支持 localhost 访问,我们必须设置一下才可以远程访问,另外还有一些 MySQL 8.0 连接时的一些问题,本文也会一并进行讲解如何解决. 1.登录MySQL mysql -u root -p 输入您的密码 2.选择 mysql 数据库 use mysql; 因为 mysql 数据库中存储了用户信息的 user 表. 3.在 mysql 数据库的 user 表中查看当前 root 用

  • linux文件上传,给文件或目录添加apache权限的方法

    在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: 1. [Tue Jan 31 09:40:27 2012] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(/home/leotody/32883679.jpeg): failed to open stream: Permission denied in /var/www/upload_file

  • APK程序获取system权限的方法

    本文实例讲述了APK程序获取system权限的方法.分享给大家供大家参考.具体如下: 最近项目需要,用NDK编程,遇到了些问题,在访问底层的设备时,没有权限,后来就在网上查找了资料,一开始还以为有root权限,找来找去,弄来弄去,程序都获取不到root权限,后来找到原来用system权限就可以访问设备了.网上找到2种方法,一是在源码中编译,二是修改密钥.刚开始弄android的,对源码不了解,就选择了第二种方法. 下面是操作步骤: 1.在代码中,AndroidManifest.xml文件的man

  • SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法

    一.Security简介 1.基础概念 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring的IOC,DI,AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为安全控制编写大量重复代码的工作. 2.核心API解读 1).SecurityContextHolder 最基本的对象,保存着当前会话用户认证,权限,鉴权等核心数据.Secu

  • Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw---- 1 root root 188, 0 /dev/ttyUSB0 信息显示:该设备的用户及其所属组别都是root,root的持有者对该设备具有读写权限.但是,我们的App是被排除在root之外的,总之无法读写该设备. 一个解决方案是:赋予others以读写权限.但是这样,任何其他第三方应用都可以

  • android6.0运行时权限完美封装方法

    前几天看了郭大神的运行时权限的专讲,深受启发,由于现在基于目前项目中的运行时权限封装的还不是那么完美,趁着郭神建议的还是历历在目.于是把它完整的敲了下来.并在此基础上添加上自己的一些见解,封装成一个完整的demo,希望与大家进行交流与. 在这里我进行了简单的在activity中简单进行获取权限和工具类封: 某一个权限被禁止或者是所有的权限被禁止,这里我做了去到烯烃界面去设置的处理: 如果要开启多个权限的话,则可能不同的手机显示的效果不同,有些手机在权限Dialog上显示需要获取权限的个数,但有些

  • android 6.0下webview的定位权限设置方法

    如下所示: WebView webView = (WebView)findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); //webview支持js脚本 webSettings.setJavaScriptEnabled(true); //启用数据库 webSettings.setDatabaseEnabled(true); //设置定位的数据库路径 String dir = this.getAppl

  • android 6.0 权限授权方法

    这里介绍两种方式,如下: 一.逐次 private static final int PERMISSION_READ_EXTERNAL_STORAGE = 101; private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 102; private static final int PERMISSION_CAMERA = 103; private void requestPermission() { if (ContextCompa

随机推荐