⒈ 相关工具及技术
000海图文件的解析用C++来实现,而Android主流应用的开发使用Java语言,因此涉及到C++与Android端Java代码的对话问题,需要实现两者之间的无障碍交流;为了解决这一问题,本文选择采用NDK工具和JNI技术,也是目前Android开发解决此类相关问题的主流途径。
⑴NDK介绍
Android相关应用软件的开发,基本都是以Java作为主流开发语言。但在实际程序开发中,同样支持C/C++,即所谓的原生编程。Android系统架构下的核心库是一个由C/C++编写的库的集合,因此,Android平台实际是由C/C++搭建,由C/C++编程也成为现实。
为了系统性的支持“Java + C/C++”的交换开发,催生了NDK(Native Development Kit)。作为一个工具集,支持开发者使用本地代码(C/C++)进行程序部分功能的开发。NDK的出现,方便开发者可以重用一些成熟的C/C++本地库来完成程序某些特定功能的开发,从而提高程序性能。
C/C++的嵌入,丰富了Android的开发;同时,C/C++语言本身的特性,也使NDK给Android开发带来了一系列的天然优势:
①明显提高代码的安全性。应用层主流语言Java被反编译难度较低,而以C/C++编写的动态库的反编译过程则要困难的多。
②对本地开源动态库利用更加方便。目前存在大量的C/C++开源动态库,NDK的出现,可以大大提高这些开源库的使用,不仅可以有效的重用现有代码,还可以有效提高程序开发的效率。
③明显提高代码的执行效率。C/C++语言本省的高性能性,将其进行较高性能的应用逻辑层面的开发时,可以大大优化代码的执行效率。
④提高代码的可移植性。本地C/C++动态库以.so库的形式独立存在,可以方便地应用于其他的嵌入式平台,明显提高代码的重用性。
⑵JNI技术混编
JNI,即Java Native Interface,Java本地接口;用来实现Java代码和本地C/C++代码的交互。
NDK作为谷歌开发推出的开发和编译工具集,主要用于Android的JNI开发,NDK提供Java和C/C++交互的环境,用来实现Java代码与本地的C/C++的相互调用。比如,当我们需要使用某个函数,基于效率等原因,函数用C/C++语言在NDK环境中一个类文件中实现,然后将该类文件打包成so动态库;利用JNI技术,我们只需在Java层加载上述本地动态库、定义一个JNI式的接口,便可以实现语言之间的交互,如下图1所示。