【Jsp精品源码栏目提醒】:本文主要为网学会员提供“Android 资源管理机制 - 其它资料”,希望对需要Android 资源管理机制 - 其它资料网友有所帮助,学习一下!
Android 资源管理机制 Android 资源管理机制 徐仙明umeng 徐仙明 人山日月 xuxianmingumeng.com友盟简介1 专业的移动开发服务平台2 统计分析、开发工具与应用联盟3 数据报告4 行业沙龙Overviewl 什么是资源l 资源种类、定义l 系统Framework资源l 应用资源l 访问资源l 换肤什么是资源l 描述UI 图片 布局 字符串 Raw Etc.l XML 界面UI设计师和逻辑码农分离 前端工程师htmlcssjs v.s. 后端工程师jsp java…资源种类l Res res/anim res/drawable res/layout res/menu res/raw res/values- zh etc. 语言/分辨率/版本等 qualifier name strings.xml styles.xml attrs.xml colors.xml arrarys.xml ... res/xml …定义资源XMLl 属性-值 attr-value 定义属性 styleable schema 赋值 Layout Style value type – int boolean float String reference E.g. TextView 资源定义 - Case study android.widget.TextViewplatform_frameworks_base/core/res/res/values/attrs.xml platform_frameworks_base/core/java/android/widget/ TextView.java … a theme.obtainStyledAttributes com.android.internal.R.styleable.TextView defStyle 0 …… int n a.getIndexCount for int i 0 i n i int attr a.getIndexi switch attr …. text a.getTextattr break …. ….. a.recycle在Android架构中的位置 framework.jarandroid.jar framework-res.apk core.jar 系统资源 - 追溯到源码中platform_frameworks_base/core/java/android/content/res/Reference: https://github.com/android/platform_frameworks_base/tree/master/core/res/res应用资源 com.app.apk /META-INF /res resources.arsc AndroidManifest.xml classes.dex aapt d resources com.app.apk CERT.RSA /drawable CERT.SF /layout MANIFEST.MF /xmlDalvik 共享资源l 创建 Zygote app_process进程init.rcl Zygote fork出 SystemServer 进程l Zygote加载类 preloadClasses frameworks/base/preload-classesl Zygote加载资源preloadResources frameworks/base/core/res/res/values/arrays.xmll Zygote fork创建app进程Dalvik 共享资源 DalvikVm DalvikVm DalvikVm DalvikVm SystemServer Zygote进程 普通APK进程 普通APK进程 进程 Socket Socket APK自身程 APK自身程 服务端 客户端 序以及资源 序以及资源 Framework Framework Framework Framework 共享类以及 共享类以及 共享类以及 共享类以及 共享资源 共享资源 共享资源 共享资源 同一段物理内存空间Copy on write Reference: Android 内核剖析创建应用进程 Reference: Android 内核剖析访问资源 static void android_content_AssetManager_initJNIEnv env jobject clazz AssetManager am new AssetManagerl Context if am NULL jniThrowExceptionenv java/lang/OutOfMemoryError 应用内资源 return Context.getResources /system/framework/framework-res.apk am-addDefaultAssets AssetManager LOGVCreated AssetManager p for Java object pn am clazz env-SetIntFieldclazz gAssetManagerOffsets.mObject jintaml PackageManager 其他应用的资源应用换肤l 内置 ifskin1 png1… else png2…l 外置 可下载 Apk 将皮肤apk和应用放在同一进程中 有同样的签名,配置AndroidManifest.xml文件中android:sharedUserId 属性值相同 Context context Context.createPackageContextpackagename.customskin Context.CONTEXT_IGNORE_SECURITY Drawable drawable context.getResources.getDrawableR.drawable.icon E.g. AdwLauncher zip 把皮肤文件解压缩到/data/data/package name/skin路径下 E.g. 墨迹mja 搜狗输入法sgaReference: Android应用如何实现换肤功能应用换肤 - Case Study ls /sdcard/moji/temp 103.zip ls /sdcard/moji/skin103 colon_b.png colon_w.png n0.png n1.png n2.png n3.png n4.png n5.png n6.png n7.png n8.png n9.png preview.jpg setting.xml widget_4x1_bkg.png widget_4x2_bkg.png logo.jpg skininfo.txt 系统换肤l 修改AssetManager.cpp 初始化提供framework-res.apk路径Cl 修改Resources.javaJavaQA