Android工程将流程封装在.so中是否是一个很好的选择。
2013-12-18 17:46
381 查看
楼主目前在做的项目,将大量的业务接口封装成.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-
这样的方法,在项目跨数个平台的情况下,有它最明显的优势:一库搞定,节省了大量的代码。除此之外,还可以增加代码的安全性,增加反编译难度等。
但慢慢地楼主发现,这样做也有其不可忽视的弊端:
1.对于Android来说,使用.so就要写JNI接口,这样“可移植”性就非常不好(虽然我们也不做什么跨平台的事...);
2.一旦库中接口发生变化,数个端就要配合做改动,可谓牵一发而动全身,作为上层开发人员这样非常被动;
3.Java/Android提供的一些便利的API,作为使用c/c++开发的库本身就享受不到,这样会增加一部分成本和风险;
4.这样的方式,在开发过种中,编写.so库的同事也会非常头疼,Android提供的native调试工具是非常难用的,大多数情况要加大量的log来定位问题;
5.在需要上层与库发生交互时,比如native代码回调上层,native层有心跳在监听状态等,这些情况需要大量、稳定的JNI代码做支撑,给Android程序员带来一些额外的成本;
Above all,选择这种方式与否,最好通过前期大量的考察和验证,再作出决定。
以上是楼主的一些浅见,希望大家一起讨论 -v-
相关文章推荐
- 《一个Android工程的从零开始》-5、base(四) BaseActivity——方法封装
- 《一个Android工程的从零开始》-8、base(七) Retrofit的封装
- 为何HTML5是Android开发的一个很好的选择
- 《一个Android工程的从零开始》-6、base(五) BaseFragment封装
- Cocos-X创建JS工程,编译Android .apk包,加载nanolink.so文件,创建一个实时对战游戏
- 为何HTML5是Android开发的一个很好的选择
- android学习笔记(1)---eclipse中新建一个Android工程如何选择sdk
- 创建一个简单的android aidl工程
- Android 封装一个简单的SDK基本思路.
- Android应用是否可以只有一个Service或Broadcast Reciver,而没有Activity?
- Android核心基础-3. 开发一个Android程序-3.4. 了解工程目录结构
- android获取当前系统时间,同时比较当前时间是否在一个时间段范围内
- setsockopt 设置 SO_LINGER 在Android socket编程中的一个问题:
- android面试题 不仅仅是面试是一个很好的学习
- 一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三).so文件编译过程问题的解决
- 一个Android的逆向工程
- 分享下android 一个Listview下拉刷新的二次封装
- 关于socket 通信一个封装很好的类
- 举例说明android中写一个内部类来选择文件夹中指定的图片类型
- 获取工程下的路径和判断一个文件是否已经被打开