楼主目前在做的项目,将大量的业务接口封装成.so库,提供给楼主上层代码调用。
这样的方法,在项目跨数个平台的情况下,有它最明显的优势:一库搞定,节省了大量的代码。除此之外,还可以增加代码的安全性,增加反编译难度等。
但慢慢地楼主发现,这样做也有其不可忽视的弊端:
1.对于Android来说,使用.so就要写JNI接口,这样“可移植”性就非常不好(虽然我们也不做什么跨平台的事...);
2.一旦库中接口发生变化,数个端就要配合做改动,可谓牵一发而动全身,作为上层开发人员这样非常被动;
3.Java/Android提供的一些便利的API,作为使用c/c++开发的库本身就享受不到,这样会增加一部分成本和风险;
4.这样的方式,在开发过种中,编写.so库的同事也会非常头疼,Android提供的native调试工具是非常难用的,大多数情况要加大量的log来定位问题;
5.在需要上层与库发生交互时,比如native代码回调上层,native层有心跳在监听状态等,这些情况需要大量、稳定的JNI代码做支撑,给Android程序员带来一些额外的成本;
Above all,选择这种方式与否,最好通过前期大量的考察和验证,再作出决定。
以上是楼主的一些浅见,希望大家一起讨论 -v-