本篇集中说明第三方应用集成Android.bp 写法,以及怎么集成可卸载第三方应用。
android_app_import {
name: "SogouInput",
system_ext_specific: true,
presigned: true,
dex_preopt: {
enabled: false,
},
apk: "SogouInput_android_oem_baoneng.apk",
}
# system signal
android_app_import {
name: "SogouInput",
system_ext_specific: true,
certificate: "platform",
apk: "SogouInput_android_oem_baoneng.apk",
}
android_app_import {
name: "SogouInput",
presigned: true,
dex_preopt: {
enabled: false,
},
apk: "SogouInput_android_oem_baoneng.apk",
}
android_app_import {
name: "SogouInput",
system_ext_specific: true,
presigned: true,
dex_preopt: {
enabled: false,
},
apk: "SogouInput_android_oem_baoneng.apk",
}
必须声明在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",
}
android_app_import {
name: "SogouInput",
product_specific: true,
presigned: true,
dex_preopt: {
enabled: false,
},
apk: "SogouInput_android_oem_baoneng.apk",
}
android_app_import {
name: "SogouInput",
proprietary: true,
presigned: true,
dex_preopt: {
enabled: false,
},
apk: "SogouInput_android_oem_baoneng.apk",
}
// 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;
}