通过前面三个教程,大家应该能对JNI编程入门会有一个清晰的概念,但在工作或者商用时,仅用上述的方式是不够的,
因为java调用C++方法或者C++反射某些java方法时,经常会遇到访问某些变量或者对象的问题,而这是一个非常繁琐的过程,
如果采用手动编写,经常会出现因为手误或者其他原因导致莫名其妙的错误,而会花费大量的时间在这些无谓的事情上。
那Android系统是如何做的呢,难道Android也会采用这些原始的方法,一遍一遍的检查、测试吗?
答案很简单,肯定不是这样的。
其实针对这个问题,不同的开源软件都有不同的处理,例如ijkplayer,其是自己封装出来了一些API,
在阅读时,大家就会发现,因为其API是面向过程的,即产品的稳定是由开发人员对流程的把握以及编码水平决定的。
在Android系统中,Java与Native层交互更频繁,难道Android的亲爹google就没有考虑过这个问题吗?
大家先分别阅读一下Android5.0与Android6.0 framework wifi模块的源码
Android5.0 wifi native:
Android6.0 wifi native:
通过上面两份代码可以发现,google公司在这种场景下,对jni的使用做了一层封装,且Androd6.0要比Anrdoid5.0的
封装程度要高,从这一点也可以看出,google公司确实仔细考虑过这个问题,且做了一系列持续的优化。
这样的话,大家可以根据需要,将其借鉴到自己的项目中。
只要保证JNIHelper这个库的稳定,在日常工作时,开发人员只需把大量的精力放在业务逻辑处理上即可。