Cómo agregar un nuevo paquete de recursos para 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? p>
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 p >
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="" 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.