Android 移除相关应用
前景
同一套代码,定制多个客户端项目,不同项目,不同需求,需要单独定制。
例如:android 平台默认集成小区广播功能(CellBroadCast),但是该应用某些客户用不到,需要remove。
有如下两种方式可以参考操作
方案一
查找系统源码,找到对应代码位置,修改mk,使其不编译到系统。
查找应用编译时,需要仔细,检查多个mk文件,避免修改遗漏,导致功能不生效。
下面展示一些 内联代码片
。
vendor/odm/product_name/mx/configs.mk
#add by hhuiming on 2023-02-08
FEATURE_CELLBROAD_DISABLED := yes
#add by hhuiming end
下面展示一些 内联代码片
。
build/make/target/product/telephony_system.mk
#add by hhuiming on 2023-02-08
ifeq ($(strip $(FEATURE_CELLBROAD_DISABLED)), yes)
PRODUCT_PACKAGES := \
CallLogBackup \
else
PRODUCT_PACKAGES := \
CallLogBackup \
com.android.cellbroadcast \
CellBroadcastLegacyApp \
endif
#add by hhuiming end
方案二
所有项目都编译此应用,但是在系统启动时,针对特殊项目,跳过安装。
为了避免项目之前需求混乱,通常可以通过feature的方式进行控制。在编译不同项目时,加载不同项目的configs.mk文件。 在configs.mk文件中新增feature, 在mk中判断,控制应用集成。
以方案二为例:
修改文件目录如下:
下面展示一些 内联代码片
。
vendor/odm/product_name/mx/configs.mk
//增加自定义feature,控制此功能,如果其他项目有相同需求,只需要在对应项目下增加此feature,而无需在公共仓库通过brand_name的方式进行区分和新增
#add by hhuiming on 2023-02-08
PRODUCT_PRODUCT_PROPERTIES += ro.feature.cellbroad_disable=true
#add by hhuiming end
framework/base/services/core/java/com/android/server/pm/PackageManagerService.java
vendor/odm/product_name/mx/configs.mk
//引用自定义feature
//add by hhuiming on 2023-02-08
private static final boolean FEATURE_CELLBROAD_DISABLE = SystemProperties.getBoolean("ro.feature.cellbroad_disable", false);
private static final String CELLBROAD_PACKAGE_NAME = "com.android.cellbroadcastreceiver";
//add by hhuiming end
//scanDirLI 扫描安装
private void scanDirLI(File scanDir, int parseFlags, int scanFlags, long currentTime,
PackageParser2 packageParser, ExecutorService executorService) {
/*省略*/
if (throwable == null) {
//add by hhuiming on 2023-02-08
if(FEATURE_CELLBROAD_DISABLE){
if(CELLBROAD_PACKAGE_NAME.equals(parseResult.parsedPackage.getPackageName())
&& (parseResult.scanFile.getAbsolutePath().startsWith("/system/")
|| parseResult.scanFile.getAbsolutePath().startsWith("/system_ext/")
|| parseResult.scanFile.getAbsolutePath().startsWith("/vendor/")
|| parseResult.scanFile.getAbsolutePath().startsWith("/product/"))){
continue;
}
}
//add by hhuiming end
/*省略*/
}