内置第三方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. 系统签名
# system signal
android_app_import {
    name: "SogouInput",
    system_ext_specific: true,
    certificate: "platform",
    apk: "SogouInput_android_oem_baoneng.apk",
}

集成位置

  1. system/app
android_app_import {
    name: "SogouInput",
    presigned: true,
    dex_preopt: {
        enabled: false,
    },
    apk: "SogouInput_android_oem_baoneng.apk",
}
  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. 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. product/app
android_app_import {
    name: "SogouInput",
    product_specific: true,
    presigned: true,
    dex_preopt: {
        enabled: false,
    },
    apk: "SogouInput_android_oem_baoneng.apk",
}
  1. vendor/app
android_app_import {
    name: "SogouInput",
    proprietary: true,
    presigned: true,
    dex_preopt: {
        enabled: false,
    },
    apk: "SogouInput_android_oem_baoneng.apk",
}

第三方可卸载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
  • 源码分析
// 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. 使用脚本方式安装
    使用脚本的方式

参考

  1. 权限配置
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值