V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
7hens
V2EX  ›  Android

[自荐项目] Android X2J - write XML, run Java

  •  2
     
  •   7hens · 2019-10-12 18:51:06 +08:00 via Android · 11101 次点击
    这是一个创建于 1860 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Android X2J 是一个 Gradle 插件,它可以 自动 将你的 XML 布局翻译成 Java 代码,并 自动 注入到 Activity 和自定义布局中。项目地址 https://github.com/7hens/android-x2j
    第 1 条附言  ·  2019-10-13 13:54:19 +08:00
    额,感觉好多人这个库有误解。

    X2J 不是一个 MVVM 库,也不是用 Java 代码来写布局。

    X2J 只是一个 Gradle 插件,它并没有改变我们的传统开发体验,也是使用 XML 来写布局,并且也是通过 setContentView(layoutId) 来生成 View。

    唯一的不同是,传统的布局加载方案都是在运行时解析 XML (通过 LayoutInflater ),而 Android X2J 则可以将 XML 的解析提前到编译时,从而可以让布局加载速度提升 200%。
    13 条回复    2019-10-15 11:20:23 +08:00
    winterbells
        1
    winterbells  
       2019-10-12 22:56:42 +08:00 via Android
    hmmm,
    我记得 anko 有类似的。不过是转换成 Java 后继续编辑的
    最后是不是像 flutter 那样了
    bccoder
        2
    bccoder  
       2019-10-12 23:13:35 +08:00 via Android
    大佬请喝茶
    ittianyu
        3
    ittianyu  
       2019-10-12 23:24:24 +08:00
    费这么大劲,不如直接 java 写 UI。
    推荐一下我的 UI 框架。

    单 Activity 应用也很容易实现。还可以做到动态 jar 包动态 UI。
    https://github.com/ittianyu/relight
    7hens
        4
    7hens  
    OP
       2019-10-13 00:41:07 +08:00 via Android
    @winterbells 额,这个和 anko 不一样。anko 使用 kotlin 来写代码,导致它的布局预览需要使用额外的插件,并且每次修改完都需要重新 build。

    而 X2J 和普通的开发体验一模一样,也是使用 Xml,所以能直接预览。唯一的不同是它将 XML 的解析时机提前到了编译时。所以 X2J 能将布局的加载速度提升 200%.

    而且 X2J 可以直接添加到已有的项目中,你不需要修改任何代码就能使用它。
    7hens
        5
    7hens  
    OP
       2019-10-13 00:48:29 +08:00 via Android
    @ittianyu

    relight 是模仿的 flutter 吧。这个和 X2J 不一样哦。

    X2J 还是使用普通的 XML 来写布局,和普通的开发体验没有什么区别,唯一不同是,它将 XML 的解析工作放在了编译的期间来做。
    KunMinX
        6
    KunMinX  
       2019-10-13 01:16:36 +08:00
    终于等到你
    cjh1095358798
        7
    cjh1095358798  
       2019-10-13 07:16:16 +08:00 via Android
    @ittianyu 大佬厉害啊
    7hens
        8
    7hens  
    OP
       2019-10-13 14:05:41 +08:00 via Android
    @ittianyu 我记得谷歌官方有个和 relight 类似的库 jetpack compose。类似的还有 java 版的 anvil。不过它们都没法实时预览,relight 应该也是。但 X2J 可以做到实时预览,因为它使用的还是传统的 XML。

    不过 X2J 是不能和这些响应式编程方案相提并论的,它们压根不是同一种类型的库。
    7hens
        9
    7hens  
    OP
       2019-10-13 14:07:27 +08:00 via Android
    @KunMinX 等我干嘛? →_→
    wanglufei
        10
    wanglufei  
       2019-10-14 00:13:35 +08:00 via Android
    x2c 项目本身就一堆坑,复杂点的布局和场景就支持不了
    7hens
        11
    7hens  
    OP
       2019-10-14 07:39:39 +08:00 via Android
    @wanglufei
    X2C 确实是一堆坑,但是可以改进的嘛 😂
    janus77
        12
    janus77  
       2019-10-15 10:30:39 +08:00
    这个和 X2C 有啥区别的
    7hens
        13
    7hens  
    OP
       2019-10-15 11:20:23 +08:00
    @janus77

    X2J 是一个基于 X2C 的 Gradle 插件。

    首先,X2J 会把 X2C 添加到 app 的 dependencies 里面,然后会生成 X2C 需要的 @Xml 注解。

    然后,在 apk 编译过程中,X2C 会根据上面生成的 @Xml 注解将相关 XML 布局翻译成 Java 代码。

    最后,X2J 会使用字节码编辑技术将生成的 Java 代码自动注入到 Activity 和自定义布局中。

    整个 XML 解析过程都是在编译期间完成的,所以会提升 XML 布局的加载速度。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 104ms · UTC 22:10 · PVG 06:10 · LAX 14:10 · JFK 17:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.