`
handsomeliuyang
  • 浏览: 314915 次
  • 性别: Icon_minigender_1
  • 来自: 益阳
社区版块
存档分类
最新评论

Android换肤apk

 
阅读更多

  在android系统中,每一个application是一个进程和一个用户,不同的进程间是不能互相访问的。如果想让两个程序之间可以相互访问其资源,就可以让这两个apk运行在同一个进程里就可以。要让两个apk运行在同一个进程里,要满足两个条件:相同的sharedUserId用相同的证书进行签名

  默认情况下,如果不配android:sharedUserId,则其userid与包名相同,所以我们可以把皮肤包的android:sharedUserId与主apk配置的相同,再用相同的签名打包,就可以共享资源。

  以上是打皮肤包方法,但真正把这个方案用在复杂一点的项目里时,问题会很多。比如按照上面的方法,在主apk里怎样获取皮肤包的图片:

try {
	mSkin1Context = this.createPackageContext("com.ly.skin1", CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
	mSkin1Context = this;
}
Drawable drawable = mSkin1Context.getResources().getDrawable(R.drawable.image1);

 用上面的方法有一个要求,就是在主程序和皮肤程序里都要有image1图片,但这两张图片的内容是不一样的。

  这样感觉只要资源的名称相同就行了,但关键是R.drawable.image1是一个常量,在编译阶段会用常量的值替换掉这个变量,问题就出来了,尽管主apk和皮肤包有相同名称的图片,但如果他们的值不一样,则也会出错。

  R文件里的常量的值不是只与其本身资源的名称有关,还与所有的图片名称有关,只有保证皮肤包和主apk有完全相同的图片名称(所有),才能保证其生成的常量的值也相同。

针对上面的问题的解决办法:

  如果不想皮肤包太大,可以用item属性:

<item type="drawable" name="icon"/>
<item type="drawable" name="image1"/>
<item type="drawable" name="image3"/>

这样也可以在R文件里的Drawable类里添加上面三个常量。

注意:上面的三个图片,icon,image1,image3可以在资源文件里已经存在了,也可以在这里再写一遍,但其他的layout属性不可以这样做,只能写没有出现过的。

 

共享layout文件

  上面只讲了换图片方法,即然是资源全部共享,其实还可以共享其layout文件,这样可以改变其布局文件,包括字体颜色和位置。

  同样的问题,R.layout.xxx也是常量,在编译期间都会替换成数值,为了保证其生成的常量的值都相同,我们可以让皮肤包和主apk的布局文件一样,也可以用上面的item标签,但注意item里的与layout里的,不能重复,但drawable可以。

  还有一个问题就是id值,id值也可以在item里写,这样在其他的layout文件里就不要用@+id/xxx,直接用@id/xxx就可以了,但我测出一个问题,如果把id全部都写在layout文件里,和全部都写在item里,其常量的值不一样,所以只能选一样方法。

 

讲讲用这种方法进行换肤的缺点:

   1. 由于其常量的值与整个资源都有关系,所以一个皮肤包只能与一个特定的版本相关联,每个版本都要用其独立的皮肤包,以前的不能重用,因为在新的版本里,其资源一般都会发生变化。

   2. 如果想让皮肤包小一点话,就要为不能的手机分辨率打不同的apk包

   3. 由于不同的版本之间不能共用皮肤包,所以用户更新新版本后,只有手动才能把老的皮肤包删除掉,但用户区分哪个是老的皮肤包,比较麻烦。

   4. 为了维护的方便,一般是把每个版本拥有的皮肤包的地址写死在客户端。

1
0
分享到:
评论
2 楼 duckbit 2015-06-03  
楼主是否能把共享layout的例子发给我,有点没明白 谢谢额!
bhan@hopen.com.cn
1 楼 yangmaolinpl 2013-08-06  
楼主,有没有demo发我下,谢谢!!358003548@qq.com

相关推荐

    android换肤功能简单

    首先,我们来看一下标题中的"android换肤功能简单",这表明我们将讨论的是一个相对简单的Android换肤实现方案。 在描述中提到的博客链接(http://blog.csdn.net/jan_s/article/details/48393003)可能提供了更详细...

    Android应用开发中实现apk皮肤文件换肤的思路分析

    在Android应用开发中,实现apk皮肤文件换肤是一项常见的需求,它可以提高用户的个性化体验,同时降低主程序的维护复杂度。以下是对实现这一功能的详细分析: 首先,我们需要理解Android系统的安全机制。每个APK在...

    android 换肤demo

    在Android应用开发中,换肤功能是一个非常吸引用户的功能,它可以提供个性化的用户体验,增加用户对应用的黏性。本文将基于"android 换肤demo"进行详细讲解,主要涉及的技术点包括资源的动态替换、主题切换逻辑以及...

    android换肤相关技术文档

    本文将深入探讨Android换肤的相关技术,基于提供的文档标题和描述,我们将覆盖资源加载、APK动态加载、类加载以及换肤实现等关键知识点。 首先,我们来看“Android load jar apk.docx”和“Android load apk.docx”...

    Android插件换肤完整版

    首先,Android换肤主要涉及两部分:皮肤资源和动态加载。皮肤资源通常包含颜色、图片、布局等界面元素,它们存储在单独的资源文件或APK中。动态加载则是指在运行时替换原有的UI资源,而不是重新安装整个应用。这种...

    Android 动态换肤框架原理

    4. **插件化技术**:为了实现动态换肤,可能需要用到Android的插件化技术,如DexClassLoader或 DexOpener,它们可以加载非主APK中的类和资源,使得皮肤APK能够独立于主应用运行。 5. **线程安全与性能优化**:考虑...

    Android 换肤功能的实现(Apk插件方式)源码

    总结来说,实现Android的Apk插件式换肤功能,不仅要求对Android系统有深入的理解,还需要掌握动态加载、资源管理、权限控制等多方面技术。通过对"AndroidSkinInstallByApk-master"源码的学习,开发者可以掌握这一...

    Android换肤免安装Demo

    "Android换肤免安装Demo"就是一种实现动态换肤的技术方案,它允许用户在不安装额外apk的情况下,通过加载未安装的资源来改变应用的主题和外观。这种技术的核心在于动态资源加载和分离皮肤与应用主体的逻辑,使得皮肤...

    Android动态换肤

    本文将深入探讨如何实现这个功能,主要基于标题"Android动态换肤"和描述中的关键点:通过宿主工程加载插件apk中的图片,使用反射和类加载器。 首先,我们要理解动态换肤的基本原理。传统的换肤方式通常需要用户下载...

    apk方式实现android应用程序换肤

    本文将深入探讨如何通过APK方式实现Android应用程序的换肤功能,主要涉及的主题包括皮肤资源的管理、动态加载以及换肤过程中的注意事项。 首先,我们需要理解Android应用的皮肤是如何工作的。皮肤通常是一组定制的...

    android换肤实现

    "android换肤实现"这个主题涉及到了如何让应用程序可以根据用户的选择切换不同的界面风格,类似于流行的Go桌面应用。这种技术允许用户根据个人喜好调整应用的外观,增强其交互性和视觉吸引力。 在Android中实现换肤...

    2个Android换肤实例源代码

    在Android中实现界面切换的例子,一共有2个Android换肤实例,都是挺简单的,只演示了基本的换肤原理,都生成有APK文件,可拷贝到android手机运行看效果,在些不多做介绍了,Android换肤相信是个实用的功能。

    Android插件换肤Demo

    Android换肤技术主要涉及到以下几个关键知识点: 1. **资源替换**:Android应用的皮肤通常存储为XML布局文件、图片资源等,换肤的关键在于动态加载不同的资源文件。在Demo中,可能会展示如何在运行时替换布局文件和...

    apk方式实现android应用换肤

    apk方式实现android应用程序换肤。 文章:http://blog.csdn.net/hailushijie/article/details/9454679

    Android换肤应用

    首先,我们要理解Android换肤的基本原理。通常,Android应用的界面元素颜色、样式等信息存储在资源文件(如colors.xml、styles.xml)中。换肤机制就是动态替换这些资源文件,从而改变应用的外观。这涉及到资源加载、...

    APK方式换肤

    在Android应用开发中,"APK方式换肤"是一种实现应用程序动态皮肤更换的技术。通过这种方式,用户无需重新安装应用,只需下载并安装新的皮肤APK,就能改变应用的视觉样式。这种方式增强了用户体验,使得用户可以根据...

    android 换肤 eclipse 版本,来自鸿洋的换肤方法,改换成 eclipse 版本

    在Android应用开发中,换肤功能是一个非常受欢迎的特性,它允许用户根据个人喜好更改应用程序的主题和视觉样式。本文将详细讲解如何在Eclipse环境下实现Android应用的换肤功能,这个教程是基于网络上的鸿洋大神分享...

    android apk换肤

    以下将详细讲解如何在Android APK中实现换肤功能。 首先,换肤的核心在于资源管理。Android应用的外观主要由XML资源文件定义,包括颜色、样式、布局等。换肤时,通常会创建多套这样的资源文件,每套对应一种皮肤。...

    android换肤

    以下是对"android换肤"这一主题的详细讲解。 首先,Android换肤的基本原理是通过动态加载不同的资源文件来实现界面样式的改变。在Android系统中,资源如颜色、布局、图片等都存储在res目录下,我们可以创建多个不同...

    android 换肤源码

    本文将深入探讨"android 换肤源码"这一主题,包括如何将皮肤封装成APK文件以及如何实现在Android应用中的动态换肤。 一、皮肤APK的封装 1. 创建皮肤资源:首先,你需要为你的应用创建不同主题的皮肤资源,这些资源...

Global site tag (gtag.js) - Google Analytics