graphhopper-ios 编译过程详解

370 阅读3分钟

一、写在前面

GraphHopper 是一个快速且高效的路径规划引擎,它默认使用OpenStreetMapGTFS数据, 也可以导入其他数据源。它可以用作java库或独立的web服务器,去计算两个或多个点之间的线路的距离,时间,转弯指令和许多道路属性。除了“A-to-B”的路径规划能力之外,它还支持“snap to road”、等时线计算、移动导航等。

graphhopper-iosgraphhopperoc版本,它使用j2objc.java源代码转换为Objective-C代码, 以供iOS平台的开发者来使用。该库在成功编译后会生成一个libgraphhopper.a的静态库文件。

接下来介绍该库在终端命令行模式下的编译过程

二、Mac 环境下的编译步骤

2.1 编译前的准备工作

  • JDK 8 首先查看你的Mac 系统是否已经安装了JDK,打开终端窗口并输入java -version,如果没有安装过jdk会提示需要安装。 JDK下载地址: www.oracle.com/java/techno… 先选择MacOS平台 , 再选择架构 x64 or arm64的.dmg文件。 如果不知道本机的Mac支持哪种架构, 可以通过如下命令来查看
uname -a

在这里插入图片描述

在这里插入图片描述 下载后解压,重名名为Maven,并放入到资源库/Library/Maven下. 接下来配置Maven的环境变量 (1)打开终端, 输入命令 vim ~/.bash_profile . 打开.bash_profile文件,在文件中添加设置环境变量的语句

export M2_HOME=/Library/Maven
export PATH=$PATH:$M2_HOME/bin

添加完之后执行:wq保存退出

(2) 输入 source ~/.bash_profile 使环境变量生效

(3) 输入mvn -v查看是否安装成功

在这里插入图片描述 表示安装成功

在这里插入图片描述 下载上图中标记的.zip文件, zip文件是被编译后的,可以直接拿来用。 资源比较大 1.79GB , 下载完成后,备用。

2.2 开始编译

  • 第一步:打开命令行, clone项目
git clone https://github.com/graphhopper/graphhopper-ios.git

项目下载完成后,进入并打开该目录

cd graphhopper-ios

open .

重要步骤:

将下载的j2objc.zip解压, 并将解压后的文件夹重名名为 j2objc 并将其移动到 graphhopper-ios 目录下

在这里插入图片描述

  • 第二步:更新git的子模块
git submodule init
git submodule update
  • 第三步: 编译
make class.list
make translate
make

正常编译成功后,会在graphhopper-ios 文件夹下生成一个build 文件夹, 其中就包含已经编译出来的libgraphhopper.a的静态库文件

在这里插入图片描述 可以通过命令 lipo - info xxx 来查看库支持的构架

cd build
lipo -info libgraphhopper.a

在这里插入图片描述 可以看到该静态库即支持模拟器环境的x86_64架构, 也支持真机环境下的 arm64架构

三、遇到的问题

3.1 JDK not supported. Please set JAVA_HOME to JDK 1.8 or 11. I need help

开始以为是没有正确配置 JAVA_HOME 的环境变量导致的

打开终端, 先使用如下命令查看Mac上的所有 java版本

/usr/libexec/java_home -V

有时候会返回两种结果

Matching Java Virtual Machines (2):
 	1.8.181.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

在.bash_profile 中配置JAVA_HOME 环境变量

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib

完成后记得更新

source ~/.bash_profile

尝试后发现还是报如上错误, 干脆把 '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home' 尝试删除试试。

sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin

删除后,重新编译还真就不报错了。

参考自: stackoom.com/en/question… github.com/google/j2ob…

四、静态库下载

libgraphhopper.a