通过注解编译器处理js调用native的方法

一、背景

项目中使用jsbridge框架,在H5通过js跟native交互时,H5会提前跟native约定好,通过固定的方法,方法内传入不同的插件名、方法名以及参数给native端,native端根据不同的插件名、方法名以及参数处理好,再将结果返回给H5端。

有时候项目中为了方便区分不同的插件名称,会通过在xml文件中声明不同的插件名称,然后在插件实现类中通过匹配H5传过来的方法名,来做对应的逻辑。这样的方法好处是:可以明确知道哪些方法对应哪些插件类,梳理起来很方便;弊处是:当插件中有很多方法时,那么该类就会显得很臃肿。 为了解决这个弊端,采取新的实现方案,通过编译时注解去创建方法名对应的实现类,在执行H5传递过来的插件名、方法名以及参数时,可以查到到该方法名对应的实现类,从而执行对应的代码逻辑。

二、实现思路

1、编写编译时注解器代码(可以理解为一个组件),实现在编译时,根据类的注解上声明的方法名,去将方法名、该方法名对应的实现类的全路径存储在hashmap中;

  • 1.1、如果有其他子组件需要自动在各自目录下声明一下js方法注解处理类,那么需要在各个组件的build.gradle目录下的Android闭包中定义注解的模块参数。比如:

在编译时,会根据不同的 模块标识名称,生成对应模块的模块js方法处理类。

  • 1.2、考虑到可能有不同的组件需要编译时注解去实现js方法的调用,可以在编译时声明一个基类。编译时,不同的组件会自动生成一个类去继承该基类,同时该基类中声明一个根据方法名查找类全路径的方法,所有实现了该基类的子类都需要实现该方法。

  • 1.3、需要声明一个管理类,该管理类中定义一个List, 该List中的元素是上述的基类,同时还需要声明一些添加上述1.1中提到的子类的操作,这个添加操作可以在初始化子组件时添加。

  • 1.4、还需要新建一个processor处理器,用于构造需要的功能。比如上述提到的:

    • (1)、通过方法名查找对应的实现类全路径;
    • (2)、各个子类中自动创建一个hashmap,用来存放 方法名、方法实现类的全路径。这么做的目的是为了实现(1)的功能。

2、在处理H5调用native方法时,通过注解管理类中的方法(通过方法获取方法实现类的全路径),来找到对应方法的实现类的全路径,再通过反射拿到该类的实例,从而实现了该方法的对应逻辑。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇