Android APK方式换肤实现原理
现在很多APP都有换肤的功能,例如微博,QQ等应用。这些应用的换肤原理是什么?
在用微博的时候,不难发现,当你要换肤时,先下载并安装一个皮肤apk,然后选择这个皮肤,就可以了。
这种方式就是把皮肤打包成一个APK,然后在主程序中访问这个皮肤APK中的资源。这种方式需要涉及到两个应用之间的数据访问了。
那如何做到应用间的数据访问呢?
这就得用到Android shareUserId这个属性了。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据.
假设有一个应用叫main,一个皮肤APK叫skin,那么在main应用以及skin应用中的manifest.xml文件中需要设置shareUserId属性,都设置为cn.angrycode.main
在main应用的manifest.xml文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.angrycode.main" android:versionCode="1" android:versionName="1.0" android:sharedUserId="cn.angrycode.main"> <uses-sdk android:minSdkVersion="7" />
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
</application></manifest>
在skin应用中<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.angrycode.skin" android:versionCode="1" android:versionName="1.0" android:sharedUserId="cn.angrycode.main"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> </application></manifest>
这样在主应用中就可以通过代码进行设置皮肤
Context ctx = createPackageContext("cn.angrycode.skin", Context.CONTEXT_IGNORE_SECURITY);layout.setBackgroundDrawable(ctx.getResources().getDrawable(R.drawable.bg));
这里还需要注意的是,主程序main中的资源路径以及资源名称要与skin应用中的资源路径以及资源名称要一致。例如,main主程序中的资源是 在\res\drawable-hdpi\bg.png,那么skin程序中的资源也必须在\res\drawable-hdpi\bg.png
转载于:https://www.cnblogs.com/Free-Thinker/p/3573391.html
Android APK方式换肤实现原理相关推荐
- Android三种换肤方案原理及Demo
方案一:使用主题文件 定义换肤资源 在values/下新建一个xml文件,比如theme_attrs.xml,然后定义换肤的资源类型 <?xml version="1.0" ...
- Android App节日换肤
Android App节日换肤 Android App节日换肤 1原理 2使用方式 1在XML中给需要换肤的控件添加tag属性 2在Activity中使用 3还有疑问吧 3示例图 比如支付宝,饿了么, ...
- android 状态栏 背景色_技术一面:说说Android动态换肤实现原理
换肤分为动态换肤和静态换肤 静态换肤 这种换肤的方式,也就是我们所说的内置换肤,就是在APP内部放置多套相同的资源.进行资源的切换. 这种换肤的方式有很多缺点,比如, 灵活性差,只能更换内置的资源.a ...
- 网易云--手机QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?
面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没? 心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然.面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一 ...
- Android应用程序换肤实现系列(一)
转载请标明出处:http://blog.csdn.net/EdisonChang/article/details/50021467 国内已经有很多android应用软件支持个性化皮肤定制功能,比如QQ ...
- Android模拟器的换肤和Android学习资料下载
现如今,说到Android,不知者,可以说是寥寥无几,就连邻家小妹,也在玩Android.Android的火爆,足以看到移动市场可见一斑啊.移动市场的巨大空间,巨大商机,很多人都在蠢蠢欲动 ...
- Android插件化换肤
Android插件化换肤 前言(废话) 今年是大年三十,今年怎么说呢,总体还是让自己感觉到比较满意的,但是有些时候还是感觉自己的自觉性不够.先贤曾经说过,君子慎独,愿明年的我能够铭记于心. 我这辈子最 ...
- 换肤功能原理及自定义组件化UI样式初步尝试
只从UI工作开始向前端工作,我一直计划着开发一套属于自己的UI框架,网站通过拖拽点击,或输入布局代码,后台自动生成一套静态页面,从此前端工作仅需要补充各种排版即可,静态页面通过代码生成. 可能我上面的 ...
- Android dp方式的屏幕适配-原理(后期补充完整讲解)
Android dp方式的屏幕适配-原理 传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp.sp值后导致的其他问题. 我之前写过一些相关的文章和工具插件,也收到了很 ...
最新文章
- 深度学习要点———神经网络的类型
- python 顺序栈及基本操作
- Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
- 服务器上装filezilla server后,本地的ftp客户端连接不上去
- [转] TOUGH 的系列平面广告
- JS关键字和保留字汇总
- View的draw onDraw dispatchDraw顺序
- 服务提供者框架讲解 之 myJDBC
- SCU 4487 king's trouble I
- bitbake的原理介绍, 使用方法, 编译脚本的编写方法
- 怎样用计算机绘制幂函数图像,几何画板如何画幂函数的图像 绘制方法介绍
- 百度地图 实现 热力图
- rest api解决url参数中带点的问题,REST正则匹配
- 华为静态路由及默认路由的配置
- WM_CONTEXTMENU percolate upward
- 直播入口地址的数据库修改
- 5个文献免费下载神器
- 2020-10-18大二第七周
- C盘User下的中文名字修改为英文遇到的问题
- zabbix - 2