Android S elimina dinámicamente las aplicaciones irrelevantes

Android elimina aplicaciones relacionadas

prospecto

El mismo conjunto de código puede personalizar múltiples proyectos de clientes, y diferentes proyectos y diferentes necesidades deben personalizarse por separado.
Por ejemplo: la plataforma Android integra la función de difusión celular (CellBroadCast) de forma predeterminada, pero algunos clientes no utilizan esta aplicación y es necesario eliminarla.

Hay dos formas de referirse a la operación.

opcion uno

Encuentre el código fuente del sistema, busque la ubicación del código correspondiente y modifique mk para que no se compile en el sistema.

Al buscar la compilación de la aplicación, debe verificar cuidadosamente varios archivos mk para evitar modificaciones faltantes, lo que hará que la función no surta efecto.

Algunos se muestran a continuación 内联代码片.

vendor/odm/product_name/mx/configs.mk
#add by hhuiming on 2023-02-08
FEATURE_CELLBROAD_DISABLED := yes
#add by hhuiming end

Algunos se muestran a continuación 内联代码片.

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

Opción II

Todos los proyectos compilan esta aplicación, pero al iniciar el sistema, para proyectos especiales, se omite la instalación.

Para evitar la confusión de requisitos antes del proyecto, generalmente se puede controlar por característica. Al compilar diferentes proyectos, cargue los archivos configs.mk de diferentes proyectos. Agregue una nueva característica en el archivo configs.mk, juzgue en mk y controle la integración de aplicaciones.

Tome la solución 2 como ejemplo:
modifique el directorio de archivos de la siguiente manera:

Algunos se muestran a continuación 内联代码片.

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
	/*省略*/
    }

Supongo que te gusta

Origin blog.csdn.net/weixin_45080805/article/details/128938034
Recomendado
Clasificación