Red de conocimiento informático - Material del sitio web - Cómo agregar un nuevo paquete de recursos para Android

Cómo agregar un nuevo paquete de recursos para Android

Cómo agregar un nuevo paquete de recursos al sistema Android

El sistema Android tradicional solo tiene el paquete de recursos framework-res.apk. Los fabricantes de terceros modificarán directamente el recurso framework res al personalizar la ROM para lograrlo. fines de embellecimiento. Sin embargo, este método está demasiado acoplado a los recursos nativos, lo que requiere una fusión manual durante la migración del sistema o la migración de la interfaz de usuario del marco, lo que requiere una enorme carga de trabajo. Al agregar un nuevo paquete de recursos independientes para Android, puede hacer que los recursos personalizados por el proveedor sean independientes, muy portátiles y fáciles de mantener.

Los pasos específicos son los siguientes:

1 Modificar build/core/clear_var.mk

LOCAL_USE_LETV_FRAMEWORK_RES:= true

2. Modifique la compilación /core/package.mk

Agregue el siguiente script antes de $(R_file_stamp): $(framework_res_package_export_deps), luego modifique $(R_file_stamp): $(framework_res_package_export_deps) y $(LOCAL_INTERMEDIATE_TARGETS. ):

PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)

Como sigue:

¿Ver fuente impresa?

1 ifeq ($(LOCAL_USE_LETV_FRAMEWORK_RES),true)

2 letv_framework_res_package_export := \

3 $(llamar a intermediarios-dir-para,APPS. letv- framework-res,,COMMON)/package-export.

4 letv_framework_res_package_export_deps := \

5 $(dir $(letv_framework_res_ package_export))src/R.stamp

6 más

7 letv_framework_res_package_export :=

8 letv_framework_res_package_export_deps :=

9 endif # LOCAL_USE_LETV_FRAMEWORK_RES

¿ver fuente impresa?

1 $(R_file_stamp): $(framework_res_package_export_deps) $( letv_framework_res_package_export_deps)

2 $(LOCAL_INTERMEDIATE_TARGETS):

3 PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)

4 $(letv_framework_res_package_export)

5 endif # LOCAL_NO_STANDARD_LIBRARIES

3.

4. Agregue un nuevo proyecto de paquete de recursos y cree una nueva carpeta letv_res en el mismo directorio de framework/base/core/res para almacenar nuestros recursos. Copie AndroidManifest.xml y Android.mk del directorio res y modifíquelos.

Recuerde establecer LOCAL_USE_MY_FRAMEWORK_RES en falso.

¿Ver código fuente?

01 LOCAL_PATH:= $(llamar a mi-dir)

02 incluir $(CLEAR_VARS)

03

04 LOCAL_MODULE_TAGS := opcional

05

06 LOCAL_PACKAGE_NAME := letv-framework-res

07 LOCAL_CERTIFICATE := plataforma

08

09 # Establece LOCAL_USE_LETV_FRAMEWORK_RES en falso

10 LOCAL_USE_LETV_FRAMEWORK_RES := false

11

12 # Dile a aapt que cree archivos "extendidos". Dígale a aapt que cree ID de recursos "Extendidos (no de aplicación)",

13 # porque estos recursos serán utilizados por muchas aplicaciones.

14 LOCAL_AAPT_ FLAGS := -x

15

16 # Instálalo con la biblioteca.

17 LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)

18

19 # Crear paquete-export.apk, se pueden obtener otros paquetes de software usándolo

20 # Datos de recursos independientes del producto, como ID y definición de tipo.

21 LOCAL_EXPORT_PACKAGE_RESOURCES := true

22

23 # Contiene recursos generados por el archivo RenderScript del sistema.

24 framework_ GENERATED_SOURCE_DIR := $(call middles-dir-for,JAVA_LIBRARIES,framework,,COMMON)/src

25 framework_RenderScript_STAMP_FILE : = $(framework_GENERATED_SOURCE_FILE :) = $(framework_GENERATED_SOURCE_DIR )/RenderScript.

26 #LOCAL_RESOURCE_DIR := $(framework_GENERATED_SOURCE_DIR)/renderscript/ res $(LOCAL_PATH)/res

27

28 incluir $(BUILD_PACKAGE )

29

30 # Asegúrese de compilar el archivo .rs del sistema antes de compilar package-export.apk.

31 #$(resource_export_package):$(framework_RenderScript_STAMP_FILE)

32

33 # Definir objetivos intermedios globales de los que otros módulos pueden depender. FALSO: letv-framework-res-package-target

35 letv-framework-res-package- target: $(LOCAL_BUILT_MODULE)

¿ver fuente impresa?

03 paquete="letv" coreApp="true" android:sharedUserId="android.uid.system"

04 android:sharedUserLabel="@null">

05

06

07 android:persistent="true"

08 android:hasCode="false"

09 android:label="@null"

10 android:allowClearUserData="false"

11 android.killAfterRestore="false"

12 android: icon="@null">

13

14

15

16

Los recursos son similares a los ubicados en res. Recuerde crear public.xml y public.xml en el directorio de valores. En public.xml, la distinción entre tipos de ID es estricta. Attr debe comenzar con 0x0x010000 y el elemento dibujable debe comenzar con 0x0x020000. Parece que no hay restricciones para otros tipos. Pueden comenzar simplemente con 0x0x030000 y 0x0x040000 en secuencia. De lo contrario, se producirá un error de segmentación al compilar.

ver fuenteprint?public type="drawable" name="ic_filemanager" id="0x03020000" />

4 < public type="style" name="LetvTheme" id= "0x03030000" />

5

6

7

8

5. Lo anterior solo resuelve el problema del entorno de compilación de recursos, y el proceso de búsqueda de recursos también debe modificarse.

AssetManager() {

02 sincronizado (este) {

03 if (DEBUG_REFS) {

04 mNumRefs =

05; incRefsLocked(this.hashCode());

06 }

07 init();

08 addAssetPath("/system/framework/letv-framework- res.apk");

09 if (localLOGV) Log.v(TAG, "Nuevo administrador de activos: " + this);

10 sureSystemAssets();

11 }

12 }

6. Finalmente, está la cuestión de la aplicación de recursos. Las aplicaciones que hacen referencia a recursos en letv-framework-res.apk en un archivo xml pueden hacerlo declarando primero letv xmlns:

view sourceprint?

1 xmlns:letv=""

p>

Luego declare letv xmlns, como @ android:drawable @android:dimen. Este método de referencia se cambia a @letv:drawable @letv:dimen.

¿ver código fuente?

01

02 03 xmlns:android=""

04 xmlns:letv=""

05 android:layout_width="fill_parent"

06 android:layout_height=" wrap_content"

07 android:gravity="center"

08 android:paddingTop="@letv:dimen/letv_width"

09 android:orientation=" horizontal" >

10

11

12 android:layout_width="wrap_content"

13 android:layout_height="wrap_content"

14 android:layout_gravity="center"

15 android:layout_marginBottom="40dp"

16 android:src="@letv:drawable/ic_filemanager" />

17

18

Producido solo como referencia.