• 内置第三方apk总结


    本篇集中说明第三方应用集成Android.bp 写法,以及怎么集成可卸载第三方应用。

    Android.bp写法

    签名

    1. 自签名
    android_app_import {
        name: "SogouInput",
        system_ext_specific: true,
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 系统签名
    # system signal
    android_app_import {
        name: "SogouInput",
        system_ext_specific: true,
        certificate: "platform",
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    集成位置

    1. system/app
    android_app_import {
        name: "SogouInput",
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. system_ext/app
    android_app_import {
        name: "SogouInput",
        system_ext_specific: true,
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. system/pri-app

    必须声明在permission白名单内。
    aosp路径:frameworks/base/data/etc/privapp-permissions-platform.xml
    手机路径:system/etc/permission/privapp-permission-platform.xml

    android_app_import {
        name: "SogouInput",
        privileged: true,
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. product/app
    android_app_import {
        name: "SogouInput",
        product_specific: true,
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. vendor/app
    android_app_import {
        name: "SogouInput",
        proprietary: true,
        presigned: true,
        dex_preopt: {
            enabled: false,
        },
        apk: "SogouInput_android_oem_baoneng.apk",
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第三方可卸载apk集成方法

    1. MTK 平台方案
    • 将包名添加到配置文件(vendor\mediatek\proprietary\frameworks\base\data\etc\pms_sysapp_removable_system_list.txt)
    • mk文件完成拷贝
    // device/mediatek/common/device.mk
     ifneq ($(strip $(MTK_BASIC_PACKAGE)), yes)
    +  PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_grant_permission_list.txt:system/etc/permissions/pms_sysapp_grant_permission_list.txt)
       PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_system_list.txt:system/etc/permissions/pms_sysapp_removable_system_list.txt)
       PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/pms_sysapp_removable_vendor_list.txt)
     endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 源码分析
    // PMS中添加
    if (sPmsExt.needSkipScanning(pkg, updatedPkg, ps, scanFile))
        return null;
    //MtkSystemServiceFactory.makePmsExt()
    //MtkSystemServiceFactoryImpl (vendor/mediatak/proprietary/frameworkes/base/.../)
    // PmsExtImpl.java(vendor/mediatak/proprietary/frameworkes/base/.../)
     @Override
        public boolean needSkipScanning(PackageParser.Package pkg,
                PackageSetting updatedPkg, PackageSetting ps, File scanFile) {
           if (!mPms.isFirstBoot() &&
               (isRemovableSysApp(pkg.packageName) || locationIsOperator(scanFile)) &&
               (ps == null && updatedPkg == null)) {
                if (mPms.isUpgrade()) {
                    if (isRemovableSysApp(pkg.packageName)
                            && !sRemovableSystemAppSetBak.contains(pkg.packageName)) {
                        Slog.d(TAG, "New added removable sys app by OTA:" + pkg.packageName);
                        return false;
                    }
                    if (locationIsOperator(scanFile)
                            && sUpgradeOperAppSet.contains(pkg.packageName)
                            && !sUpgradeOperAppSetBak.contains(pkg.packageName)) {
                        Slog.d(TAG, "New added operator app by OTA:" + pkg.packageName);
                        return false;
                    }
                }
               Slog.d(TAG, "Skip scanning uninstalled sys package " + pkg.packageName);
               return true;
           } else if (ps == null && updatedPkg != null) {
               Slog.d(TAG, "Skip scanning uninstalled package: " + pkg.packageName);
               return true;
           }
     
           return false;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    1. 使用脚本方式安装
      使用脚本的方式

    参考

    1. 权限配置
  • 相关阅读:
    cdh3.6.2集成flink1.12.0
    复习笔记bak
    一些经常忽略的东西
    [附源码]SSM计算机毕业设计茶园认养管理平台JAVA
    2020最新最全版!Java面试题大全
    蚂蚁链发布全新Web3品牌ZAN,涉及RWA、合规等服务
    阿里资深专家分享程序员三门课:技术精进架构修炼、管理探秘文档
    java毕业设计医院管理系统Mybatis+系统+数据库+调试部署
    软件工程理论与实践 (吕云翔) 第二章软件过程 课后习题及其答案
    SpringBoot 打包与运行
  • 原文地址:https://blog.csdn.net/twk121109281/article/details/126784446