最近在公司做一个项目,需要把Android界面打包进jar包给客户使用。对绝大部分开发者来说,Android界面的布局以XML文件为主,并辅以少量Java代码进行动态调整。而打包进jar包的代码,意味着无法通过常规的getResources(),getString()等方法来快速的获取资源,因为这些资源都是在apk安装的时候初始化生成的。为了满足客户的需求,笔者开始在网上寻找各种解决方案。结果如下:

1.apk主体包方案

实现方法:安装一个新的apk,新apk和主apk使用android:sharedUserId连接起来,这样主apk就可以获取新apk的所有res资源。需要注意的是,R.id.xxx的值为新apk中的R.java的值。因此需要获取到新apk的R.class,或保证新apk和主apk的R.java中的资源的值是完全一致的,否则会出现获取资源对不上号的情况。结论:可以实现,但需要多安装一个apk。静默安装apk需要root权限,否则会弹出安装界面。还没有找到不需要安装apk就能获取资源的方法。
参考链接:http://blog.csdn.net/lg707415323/article/details/7709076

2.LayoutInflater方案

实现方法:通过LayoutInflater类解析外部XML资源,并转换为所需布局。分析:Android解释因为性能原因,LayoutInflater只支持解析已经预编译在apk包里的xml。所以没办法解析外部导入的xml布局资源。结论:不可行
参考链接:http://gamebs.blog.163.com/blog/static/1860182182012827545621/


3.Android XML 转 Java Code方案(开源/自研)

参考链接:http://www.xmltojava.com/在线的Android XmToJaval转换服务,免费,支持各种控件(http://www.xmltojava.com/page/controls/),支持还算丰富,但转换完还需要一些简单的手动编辑。不支持drawable和values目录下的资源转换。结论:能减轻手动翻译的工作量,但不能完全解决需求。drawable和string需要自己手动翻译实现。参考链接:https://github.com/bsp0911932https://github.com/rvp2014/AndroidXMLToJavaConverter个人开源项目,第一个项目用php写的,代码量很少,只更新过一次,应该没法用。第二个项目是Androidy应用动态解析,刚刚建立起来的,支持的字段很少,应该也没法用。完成度都很低。在Google和Github上都没有找到成熟的方案。结论:不可用

4.zip包方案

只能替换图片资源,没办法解析Xml布局。(桌面应用的换肤功能都基于zip或apk这两个方案)结论:不可行

5.ClassLoader方案

把apk包用ClassLoader加载进来,并通过反射的方法获取Activity或其他组件的各种方法,从而获得资源。分析:实践发现,反射调用Activity结论:不可行
参考链接:http://blog.csdn.net/mer1234567/article/details/7308855
总结论:方案1最方便,但客户不一定能接受;方案3比较稳妥,但是耗费人力大。

由于方案1需要安装apk,如果要静默安装还需要root权限。这种方案过于累赘,只能选择Android XML翻译原生代码的方法。于是就有了AndroidXMLToJava管理工具的诞生。

接下来几篇会分享该转换工具的一些解决过程。项目快完善的时候会放上博客,现在暂时不放出来。

版权所有,转载请注明出处:

http://www.cnblogs.com/sickworm/p/4245089.html

更多相关文章

  1. 高级Redis应用进阶课 一站式Redis解决方案
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  4. Android滑动冲突的完美解决方案
  5. android之Resources相关
  6. Android录屏单帧获取方案
  7. Android(安卓)Resource介绍和使用
  8. Android(安卓)Activity启动耗时统计方案
  9. Android(安卓)中内存泄漏的原因分析及解决方案

随机推荐

  1. Android(安卓)Eclipse 打包apk
  2. Android(安卓)不同分辨率适配
  3. Android(安卓)开发指南读书笔记(一)—— Ac
  4. Android开发之Android Studio安装教程
  5. Android SDK文档之Drawable Mutations
  6. Android Material Design :LinearLayoutCo
  7. android事件分发机制的实现原理
  8. Gradle build 报错:Received status code
  9. SAP BSP, Java Web Project,Android和微信
  10. 【转】Android 图标规格