前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android XML】Android XML 转 Java Code 系列之 介绍(1)

【Android XML】Android XML 转 Java Code 系列之 介绍(1)

作者头像
sickworm
发布2019-03-01 15:44:56
2K0
发布2019-03-01 15:44:56
举报
文章被收录于专栏:sickwormsickwormsickworm

最近在公司做一个项目,需要把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/bsp0911932

https://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://sickworm.com/?p=32

共享此文章:

相关

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年2月1日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.apk 主体包方案
  • 2.LayoutInflater 方案
  • 3.Android XML 转 Java Code方案  (开源/自研)
  • 4.zip包方案
  • 5.ClassLoader方案
    • 共享此文章:
      • 相关
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档