Android插件化的思考——仿QQ一键换肤,思考比实现更重要资料.doc

Android插件化的思考——仿QQ一键换肤,思考比实现更重要资料.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android插件化的思考——仿QQ一键换肤,思考比实现更重要! 关于QQ的换肤,他们的实现思路我不是很清楚,但是你可以看一下这张换肤的截图 我们想使用哪个主题就直接下载就好了,这一实现的过程我们大致的可以猜想: 首选是下载到本地指定文件夹,然后通过插件加载到我们的apk,最后应用为皮肤,逻辑大致是这样的逻辑了,那我们是不是应该动动手啊动动脑? 首选我们新建一个工程好了——PlugInSample 一.实现思路 其实说起来,这个插件的实现思路,确实是比较的麻烦,思来想去,还是一种办法比较靠谱,首先,我们刻意去获取手机上所有的安装的/未安装的程序,过滤掉没用的,留下我们的插件apk,我们的插件apk怎么去辨别呢?我们可用通过设置sharedUserId,然后用实体类把插件名称和包名保存下来,有了包名,就比较好说了,我们可用获取插件的上下文,也就是createPackageContext,然后就可以做点坏事了,我们可以去剖析我们的R文件 因为R文件里面都是静态的原因,我们很容易联想到反射机制,是的,我们可以再一次过滤掉无用的信息,通过我们的PathClassLoader去加载,访问我们的内加载器反射到我们的图片ID,也就是后面的那段数字,然后,嘿嘿,就可以使用了,是不是思路比较清晰了?这里要注意的就是图片命名统一,这样就比较号过来,那具体我们应该怎么做? 二.PlugIn主程序 我们写一个Spinner,每次切换就直接换肤怎么样?OK,每次换的时候就从插件APK里加载我们的图片资源,看起来是比较顺畅的逻辑,那我们具体该怎么做呢? ?xml version=1.0 encoding=utf-8? LinearLayout android:id=@+id/mLinearLayout xmlns:android=/apk/res/android android:layout_width=match_parent android:layout_height=match_parent android:gravity=center android:orientation=vertical Spinner android:id=@+id/mSpinner android:layout_width=wrap_content android:layout_height=wrap_content/ /LinearLayout 1.初始化 /** * 初始化View */ private void initView() { //初始化控件 mSpinner = (Spinner) findViewById(R.id.mSpinner); } 当然,我这刚应用就一个View,但是实际开发当中可不止,所以步骤一定要明了 2.获取所有的插件 /** * 获取手机里的插件 * * @return */ private ListPlugInBean findPlugIn() { mList = new ArrayList(); //获取相关信息 PackageManager mPackageManager = getPackageManager(); //获取卸载/未安装的安装包信息 ListPackageInfo mUninstallPackage = mPackageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); //遍历拿到我们的信息 for (PackageInfo info : mUninstallPackage) { String pkgNmae = info.packageName; //获取shareId,根据id判断是否是我们的ID String shareUserId = info.sharedUserId; if (!TextUtils.isEmpty(shareUserId)) { //如果id相同 if (shareUserId.equals(com.liuguilin.share)) {

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档