LOCAL_PRIVILEGED_MODULE 详解(3)

LOCAL_PRIVILEGED_MODULE 详解(1) LOCAL_PRIVILEGED_MODULEAndroid ROM编译时的一个变量,其与编译、安装、权限管理等几个方面都有关系。本文整理一下与LOCAL_PRIVILEGED_MODULE有关的知识。 阅读详情

2.2 ApplicationInfo中的 privateFlags 和 PRIVATE_FLAG_PRIVILEGED

看一下ApplicationInfo源代码

    /**
     * Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
     * {@hide}
     */
    public int privateFlags;
    /**
     * Value for {@link #privateFlags}: set to {@code true} if the application
     * is permitted to hold privileged permissions.
     *
     * {@hide}
     */
    public static final int PRIVATE_FLAG_PRIVILEGED = 1<<3;

首先看到@hide,可见不会出现在Android公开API中,也就是说,第三方App无缘使用。先来看看这个字段在Android系统中是如何被使用的。随便找例子:
在系统应用安装器(PackageInstaller)中,packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

    private boolean isInstallRequestFromUnknownSource(Intent intent) {
        String callerPackage = getCallingPackage();
        if (callerPackage != null && intent.getBooleanExtra(
                Intent.EXTRA_NOT_UNKNOWN_SOURCE, false)) {
            try {
                mSourceInfo = mPm.getApplicationInfo(callerPackage, 0);
                if (mSourceInfo != null) {
                    if ((mSourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
                            != 0) {
                        // Privileged apps are not considered an unknown source.
                        return false;
                    }
                }
            } catch (NameNotFoundException e) {
            }
        }

        return true;
    }

frameworks/base/services/core/java/com/android/server/firewall/SenderFilter.java

    static boolean isPrivilegedApp(int callerUid, int callerPid) {
        if (callerUid == Process.SYSTEM_UID || callerUid == 0 ||
                callerPid == Process.myPid() || callerPid == 0) {
            return true;
        }

        IPackageManager pm = AppGlobals.getPackageManager();
        try {
            return (pm.getPrivateFlagsForUid(callerUid) & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
                    != 0;
        } catch (RemoteException ex) {
            Slog.e(IntentFirewall.TAG, "Remote exception while retrieving uid flags",
                    ex);
        }

        return false;
    }

由上面这些代码实例基本可以了解这个字段的用法。下面在PMS扫描/安装应用的逻辑中找到处理这个字段的部分来分析。
我们知道,PMS是PackageManager的后台服务,先看看PMS侧是如何实现PackageManager.getApplicationInfo()。
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java:

    @Override
    public ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) {
        if (!sUserManager.exists(userId)) return null;
        enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get application info");
        // writer
        synchronized (mPackages) {
            PackageParser.Package p = mPackages.
LOCAL_PRIVILEGED_MODULE 详解(2) 2.安装时作用 在介绍LOCAL_PRIVILEGED_MODULE安装时的作用之前,先介绍几个关键的准备知识 阅读详情

相关推荐

LOCAL_PRIVILEGED_MODULE 详解(4)

2.3 packages.xml中的privateFlags字段

@甘道夫@的专栏 2506

预置app/apk到系统 && 预置so库进系统 && 预置普通文件和文件夹进系统

Android的本地实现层次具有基本的库和程序。这些库和程序是Android基本系统运行的基础。主要包含了以下的内容:C语言底层库libcutils、Init进程、Shell工具、C++工具库libutils。 Android的源代码结构分为三部分: (1)核心工程:是建立android系统的基础,在根目录下的若干文件夹。 bionic:提供C/C++标准库的功能,它

zhandoushi的专栏 9708

LOCAL_PRIVILEGED_MODULE 详解(5)

3.权限管理作用

@甘道夫@的专栏 2389

android开发 LOCAL_PRIVILEGED_MODULE属性分析

android开发 LOCAL_PRIVILEGED_MODULE属性分析

Android应用开发工程师 1277

记录 内置客户apk报错: Signature|privileged permissions not in privileged permission allowlist

添加权限 android.permission.INSTALL_PACKAGES。Android.mk 添加配置 com.xxx.xxx.xml 权限文件。在mk同目录下新建文件 com.xxx.xxx.xml。

qq_19447521的博客 229

RK3326 Android8.1内置第三方apk 到/system/app、/system/priv-app、/data/app

基本步骤 新建文件夹(与安装包名字一致) (1)文件内容:APK安装包 (2)文件内容:Android.mk 在Android 源码编译时必定执行的Makefile里添加自己的APK名字 PRODUCT_PACKAGES += \ SouGouInput 可以参考Android源码下APK的目录结构 Android.mk(以搜狗...

开发界里的一股清流 9022

Android 系统内置APK

1.在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以KeyTest为例: 2.将KeyTest.apk放入packages/apps/KeyTest下 3.创建Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) # Module name should match apk name to be installed LOCAL_MODULE := KeyTest LOCAL_MODULE_TAG

u012765781的博客 6752

Android预置apk到系统

Android预置Apk到系统,有以下几种情况: 1、带源码的apk/不带源码的apk 2、带so库/不带so库 3、用户可以卸载,恢复出厂设置时不能恢复/恢复出厂设置时能够恢复 4、预置的位置 预置到system/app/目录 (不可卸载) 预置到system/priv-app/目录 (不可卸载,系统核心应用) 预置到data/app/目录 (可卸载) Android.mk文件 首先看两个简...

weixin_34124651的博客 1708

LOCAL_PRIVILEGED_MODULE

android.mk文件中不添加此属性,编译后的路径为/system/app/SystemUI 在同样具有系统权限情况下,/system/pri-app下的apk权限比/system/app下大

Me_Ordinary的专栏 1175

Android-系统预设-App,有什么难的?

(一)调整好心态心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。(二)时间挤一挤,制定好计划一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。

2401_84408437的博客 945

Android中系统应用编译的目录设置方法

最近的工作是整理系统中的apk,关于apk要编译到哪些目录下,这个问题做一下记录。 1.主要实施地点:Android.mk 2.相关设置属性:LOCAL_MODULE_PATH,LOCAL_CERTIFICATE,LOCAL_PRIVILEGED_MODULE LOCAL_MODULE_PATH:目标安装路径,如果设置该属性的就会安装到指定的路径 举例:LOCAL_MODULE_PATH:

Moons_is_me的博客 1924

android Selinux 之 platform_app,system_app,priv_app,untrusted_app

概念: 平台签名:Android.mk中,定义LOCAL_CERTIFICATE := platform system权限:AndroidManifest.xml中声明 android:sharedUserId="android.uid.system" ,同时是平台签名 分类: untrusted_app 第三方app,没有Android平台签名,没有system权限 platform_app 有android平台签名,没有system权限 system_app 有android平台签...

yinhunzw的专栏 8092

Android.mk变量解析

Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。

u010345983的博客 2925

Android.mk编写规则及部分变量使用说明

一、通过Android.mk添加一个编译模块到系统中的顺序如下: LOCAL_PATH; CLEAR_VARS; LOCAL_SRC_FILES; LOCAL_CFLAGS (可选); LOCAL_MODULE; LOCAL_STATIC LIBRARIES (可选); BUILD_HOST_EXECUTABLE/BUILD_EXECUTABLE等 二、Android.mk中常用的重要变量解析 ...

qq_41779533的博客 328

配置自己的apk为系统应用

最近开发中需要将自己开发的应用定义为系统应用,以调用一些@hide的系统api 首先我是通过在android源代码下编译的方式,在android.mk中部分定义 使用平台证书: LOCAL_CERTIFICATE := platform 与之在system/priv-app目录下 LOCAL_PRIVILEGED_MODULE := true 再然后在AndroidManifest.x...

xia236326的博客 1751

android系统应用开发Android.mk文件语法详解

虽然是开发系统的应用,由于工作中很少需要写一个独立的android.mk,即使需要也是参照已有应用中的android.mk去写,稍作修改即可完成,很少去研究Android.mk。最近一段时间有人问到Android.mk文件中一些知识点,让我哑口无言,甚是惭愧,今天来进行系统梳理。 下面以我目前开发系统应用SnapdragonCamera为例!贴出Android.mk文件...

zjy764219923的专栏 1113

Android.mk 常用常量总结

LOCAL_PATH := $(call my-dir) 此变量表示源码所在目录,写法固定 include $(CLEAR_VARS) 清除 除LOCAL_PATH变量外其它缓存变量 LOCAL_MODULE 此变量表示模块名称 LOCAL_MODULE_TAGS 此变量表示模块编译模式 LOCAL_SRC_FILES 此变量包含构建系统生成模块时所用的源文件列表 LOCAL_MODULE_CLASS 此变量表示标识所编译模块最后放置的位置 LOCAL_MODULE_SUFFIX 此变量表示后缀名 在bui

syk12138的博客 4237

android 如何将apk编译到system/priv-app目录

Android.mk文件中添加属性LOCAL_PRIVILEGED_MODULE := true

liangtianmeng的专栏 3625
上一篇: LOCAL_PRIVILEGED_MODULE 详解(2)
下一篇: LOCAL_PRIVILEGED_MODULE 详解(4)
00甘道夫00
00甘道夫00 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄19年 81粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值