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 添加默认权限的资料请关注Devmax其它相关文章!

android9.0 默认apk权限添加方法的更多相关文章

  1. 详解Html5页面实现下载文件(apk、txt等)的三种方式

    这篇文章主要介绍了详解Html5页面实现下载文件(apk、txt等)的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. android – 在IntelliJ中减小调试APK的大小

    我正在合作开发具有9个Android库和10个jar库的中型Android项目.我在IntelliJ中开发,我的协作者在Eclipse中工作.在Eclipse中,调试APK的大小约为2.5MB,在IntelliJ中它是20MB.这怎么可能?我可以在IntelliJ中减小APK的大小,以便更快地将其上传到设备中吗?解决方法APK是一个zip文件.将扩展名更改为.zip并解压缩.看看里面有什么.

  3. android – 如何在没有eclipse的情况下构建apk或使用配置文件修改apk版本?

    我想从xml文件构建一个带有一些大配置的apk.我想知道是否有任何方法可以控制apk的构建过程或者是否有任何方法可以从我们的源代码创建apk并进行一些修改我们的源基于我们的配置xml文件.或任何其他方式来构建apk文件我不希望每次应用程序运行时都读取我的配置文件,我想在应用程序本身中包含更改欢迎所有建议,评论,答案,想法提前致谢…

  4. android – 未配置应用程序通过Google Play结算的应用程序

    我正在研究一个Android项目,我正在尝试实施InAppBillingV3.我已将我的应用上传到GooglePlay,并在应用中添加了IAP.我可以成功检索我的应用程序的IAP列表及其价格,但当我实际尝试购买时,我的设备会出现以下错误(没有错误)ThisversionoftheapplicationisnotconfiguredforbillingthroughGooglePlay.Checkt

  5. android – Play商店错误“您上传了使用不安全证书签名的APK”

    我正在尝试将游戏上传到Unity3D开发的Play商店.我已经使用Unity的内置方法使用所有必需的参数签署了apk但我在尝试上传Play商店上的APK时遇到此错误解决方法现在也有同样的错误……新的应用程序……似乎我们需要手动创建击键UPD:是的,它有所帮助

  6. android – zipalign:找不到命令 – Ubuntu

    我正在尝试使用命令行在Ubuntu14.04LTS系统上压缩“input.apk”文件,因为我还没有访问源代码.如果我没有弄错,我应该可以使用以下命令执行此操作但我得到以下输出我确保zipalign文件在我的…sdk/tools目录中,我必须从我的…build-tools/android-4.4W文件夹中复制,因为它最初缺少.当我按照另一个问题的建议输入这一行时我得到以下输出这是否意味着我需要一个.zip文件而不是我的.apk来zipalign?正如@Haresh的评论中所述,以下命令有效解决方法尝试运行

  7. android – 你上传了一个以调试模式签名的APK.您需要在发布模式错误中签署APK

    我正在尝试在GooglePlay商店上传应用程序.我正在构建.apk并使用Maven进行签名.我使用maven-jarsigner-plugin来签署.apk文件.我正在使用我使用Eclipse向导创建的密钥来签署另一个Android应用程序.我使用以下命令对.apk文件进行zipalign:zipalign[-f][-v]infile.apkoutfile.apk当我尝试在Playstore上上

  8. android – 按密度分割APK仍包含所有资源

    我决定尝试apksliptting来减少我的apk的大小.我将以下内容添加到我的gradle构建文件中这成功地为各种密度生成单独的apks.但是,我注意到所有apks都是相同的大小,没有一个比通用apk小.所以,我将一个加载到apk分析器中,发现它包含所有资源.没有人被剥夺.因此,所有配置都有效地生成了具有不同文件名的相同apk.我错过了什么吗?是否有任何其他构建选项可能会阻止正在删除的资源?

  9. 如何检测Android APK是否在其清单中将debuggable设置为true或false而不安装它?

    正如标题所说,我希望能够在计算机上找到APK是否已将debuggable设置为true或false,而无需将其安装在设备上,运行它并查看它是否显示在DDMS中.解决方法这是“一旦你知道如何”的事情之一–使用aapt工具检查清单.该命令将为您提供AndroidManifest.xml文件的编译形式的转储–输出将类似于A:android:debuggable(0x0101000f)=(type0x12

  10. 如何使用Android更新程序脚本安装APK

    我正在尝试使用Android的更新程序脚本语言(Edify?我建议完全卸载该应用并再次尝试.在我看来,该特定功能不适合安装该应用程序.您可能想尝试通过命令安装它:

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部